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: "..." }]