Duvida no MongoDB

4 respostas
luistiagos

Bom dia criei 2 registros:

[ {   "nome" : "raiz",   "_id" : {   "$oid" : "4f478e63cc93742e0d033298"   }   },
  {   "nome" : "no01",   "_id" : {   "$oid" : "4f478e6bcc93742e0d03329a"   }   }]

e quero vincular o no01 a raiz desta forma:

[ {   "nome" : "raiz", "no":{   "nome" : "no01",   "_id" : {   "$oid" : "4f478e6bcc93742e0d03329a"   }   },
   "_id" : {   "$oid" : "4f478e63cc93742e0d033298"   }   }]

para isto fiz os seguintes comandos:

db.arvore.save({nome:'raiz'});
db.arvore.save({nome:'no01'});
var no = db.arvore.find({nome:'no01'});
db.arvore.update({nome:'raiz'},{'$push':{'no':no}});

porem ao fazer o db.arvore.find(); o resultado é o mesmo:

[ {   "nome" : "raiz",   "_id" : {   "$oid" : "4f478e63cc93742e0d033298"   }   },
  {   "nome" : "no01",   "_id" : {   "$oid" : "4f478e6bcc93742e0d03329a"   }   }]

O que á de errado? como vinculo objetos filhos aos pais com o MongoDB?

4 Respostas

quikkoo

bom eu vejo várias coisas erradas e estranhas acontecendo aí

1 - a função ‘find’ retorna um cursor e não um documento, vc precisa usar ‘findone’ pra ter o documento ou percorrer o cursor com ‘foreach’
2 - adicionar um documento “primário” a outro diretamente gera redundância desnecessária, use a referência ‘$oid’
3 - pense se é realmente necessário que nodos q não são raiz fiquem em um mesmo nivel na base de dados, a primeira vista me parece ter mais sentido que sejam documentos embarcados

flw, t+

luistiagos

quikkoo:
bom eu vejo várias coisas erradas e estranhas acontecendo aí

1 - a função ‘find’ retorna um cursor e não um documento, vc precisa usar ‘findone’ pra ter o documento ou percorrer o cursor com ‘foreach’
2 - adicionar um documento “primário” a outro diretamente gera redundância desnecessária, use a referência ‘$oid’
3 - pense se é realmente necessário que nodos q não são raiz fiquem em um mesmo nivel na base de dados, a primeira vista me parece ter mais sentido que sejam documentos embarcados

flw, t+

tem algum exemplo? só fiz o tutorial do site MongoDB, e la só mostra coisas bem basicas…

quikkoo

nao tenho nenhum exemplo complexo pra mostrar, recomendo apenas vc se aprofundar nas documentações do mongodb

mas tente isso no console do mongo, ainda é muito simples, mas acho q já da pra ver q existem idéias sobre objetos parciais e de subobjetos

raiz = { nome: 'raiz', valor: 5 }
db.graph.save(raiz)

nodo = { nome: 'primeiro', valor: 3 }
db.graph.update({ nome: 'raiz' }, { $set: { esq: nodo } })
db.graph.update({ nome: 'raiz' }, { $set: { dir: { nome: 'segundo', valor: 6 } } })

db.graph.find()
db.graph.findOne({ nome: 'raiz' }, { _id: 0, dir: 1 })

flw, t+

luistiagos

vlw

Criado 24 de fevereiro de 2012
Ultima resposta 27 de fev. de 2012
Respostas 4
Participantes 2