On Github maceio-mug / curso-introdutorio
Vilker e Vinícius
{
"name": "MongoDB",
"type": "DB",
"tags": ["bson", "performance", "data richness"],
"latest-version": {
"major": 2,
"minor": 4,
"patch": 8
},
"schemaless": true
}
*Documentos embutidos e referências **Uso avançado
Na coleção bandas:
[
{
"title": "Mozart Group",
"desc": "A creative quartet group",
"tags": "musica-classica"
},
{"title": "Angra"},
{
"title": "Calcinha Preta",
"desc": "Famosa banda de forró brasileira",
"tags": ["forro", "brasil"]
}
]
O MongoDB trata, geralmente, a falta de atributos e um atributo com o valor null da mesma forma. Exceções (poucas):
No MongoDB, operadores de seleção (primeiro argumento do find) são usados de forma similar ou idêntica entre arrays e não-arrays.
Cuidado com os operadores de atualização!
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
Outras considerações:
Inicia o processo do banco de dados, rodando na porta especificada e usando a pasta "/path/to/db/files" para salvar os arquivos.
mongod --port arg --dbpath /path/to/db/files
Abre o console JavaScript do MongoDB com uma conexão a $DBADDRESS e executa o script file.js.
mongo --shell $DBADDRESS file.js
Exemplos de endereços:
mongoimport --host myhost --db my_cms --collection docs < mydocfile.json
Base de exemplo: https://gist.github.com/anonymous/41d5da75f34768899e8b/raw/6b4e9888cc5bc216dc7b6abc82e48b69fd4a468f/pacman
db.coll.insert(doc);
db.coll.insert([doc1, doc2]);
db.coll.find({idade: 15});
db.coll.find({"nome.primeiro": "Yotsuba"}, {idade: true, _id: false});
db.coll.find({idade: {$lt: 15}});
db.coll.find({idade: {$gt: 15, $lt: 40, $ne: 33}});
db.coll.remove({_id: ObjectId("52a3d4d243343277580dbe77")});
db.coll.update({nome: "Moot"}, {nome: "Moot", idade: 20}); // uncool
db.coll.update({nome: "Moot"}, {$set: {idade: 20}});
db.coll.update({cargo: "tester"}, {$inc: {salario: 200}}, {multi: true});
Comando find() retorna um cursor, que pode possui alguns métodos interessantes. Ex.:
db.coll.find().sort({nota: -1, idade: 1}).skip(2).limit(10);
Evite:
{"groups": {
152: "hi",
111: "group2"
}}
Prefira:
{"groups": [
{"id": 152, "name": "hi"},
{"id": 111, "name": "group2"}
]}
posts = [{
_id: ObjectID("..."),
title: "...",
body: "...",
author: "..."
}]
comments = [{
post_id: ObjectId("..."),
name: "...",
email: "...",
body: "..."
}]
posts = [{
title: "...",
body: "...",
author: "...",
comments: [
{
name: "...",
email: "...",
body: "..."
},
{
name: "...",
email: "...",
body: "..."
} /*, ... */
]
}]
posts = [{
_id: ObjectID("..."),
title: "...",
body: "...",
author: "...",
comments: [/* ... */]
}]
comments = [{
post_id: ObjectId("..."),
name: "...",
email: "...",
body: "..."
}]