Resgatar vários documentos "embedados"

20 views
Skip to first unread message

Lucas Zerma

unread,
Sep 23, 2013, 4:09:18 PM9/23/13
to nosq...@googlegroups.com
Boa Tarde galera,

Sou novo no mundo NoSQL e com isso vem algumas dificuldades.

A que eu estou tendo no momento e a seguinte:

Preciso resgatar todos os documentos que estão aninhados a um documento principal puxando somente os que coincidem com o mes informado no filtro (obs o mes está no documento aninhado).

O objeto:

{
    "_id" : ObjectId("
52408b9a8a9fbb55368b4567"),
    "cod" : NumberLong(1),
    "cod_loja" : "13",
    "fornecedor" : [
        {
            "nome" : "XXXXX",
            "mes" : NumberLong(3),
            "aprovado" : 8337.56755
        },
        {
            "nome" : "AAAAAA",
            "mes" : NumberLong(9),
            "aprovado" : 1046.68
        },
        {
            "nome" : "XXXXX",
            "mes" : NumberLong(9),
            "aprovado" : 414.78
        },
        {
            "nome" : "CCCCCCCC",
            "mes" : NumberLong(9),
            "aprovado" : 473.8
        },
        {
            "nome" : "BBBBBBB",
            "mes" : NumberLong(9),
            "aprovado" : 164.16
        }
    ],
    "mes_anterior" : [
        {
            "mes" : NumberLong(9),
            "realizado" : 0,
            "aprovado" : 183605.3658499999,
            "cancelado" : 0
        }
    ],
    "total_cancelado" : 11975.09128,
    "total_realizado" : 592055.7002599995
}

O Comando:
db.aaaaa.find({"cod" : 1}, {"fornecedor" : {$elemMatch: {"mes" : 9} }})


O Resultado:

{
    "_id" : ObjectId("52408b9a8a9fbb55368b4567"),
    "fornecedor" : [
        {
          
             "nome" : "AAAAAA",
            "mes" : NumberLong(9),
            "aprovado" : 1046.68    ]
}


Por favor galera, me ajude.. UAHEHUAE to desesperado já!

Fico no aguardo....

Winston Pacheco Junior

unread,
Sep 24, 2013, 8:13:07 AM9/24/13
to nosq...@googlegroups.com
Na página do MongoDB {http://docs.mongodb.org/manual/reference/method/db.collection.find/} sempre tem vários exemplos. Acredito que algum se encaixe no seu problema.
"Query Fields of a Subdocument" parece ser um bom tópico pra começar.
Algo como isso:
db.bios.find(
   {
     "name.first": "Yukihiro",
     "name.last": "Matsumoto"
   }
)



--
Você está recebendo esta mensagem porque se inscreveu no grupo "NoSQL Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para nosql-br+u...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Lucas Zerma

unread,
Sep 24, 2013, 12:30:01 PM9/24/13
to nosq...@googlegroups.com
Winston,

Obrigado por responder, na vdd, eu consigo fazer a busca, ele me retorna o objeto que coincide com a busca, porém, nos subdocumentos, existem vários documentos e alguns correspondem outros não.

Preciso que retorne somente os que batem com a cláusula de busca.

Valeu!

David Paniz

unread,
Sep 24, 2013, 9:11:17 AM9/24/13
to nosq...@googlegroups.com
Posso estar falando besteira, mas acho que não tem como trazer só os documentos embedados. Tanto com o .find({'fornecedor.mes' => x}) quanto com o $elemMatch, você está buscando o documento que contem os fornecedores com aquilo, não os fornecedores em si.

Se não me engano o jeito vai ser pegar o documento todo e depois filtrar na sua aplicação ou usar aggregation do mongo. http://docs.mongodb.org/manual/aggregation/
 



2013/9/24 Winston Pacheco Junior <winston...@gmail.com>

Winston Pacheco Junior

unread,
Sep 24, 2013, 1:38:28 PM9/24/13
to nosq...@googlegroups.com
Lucas, realmente não entendi sua dúvida agora.
Você precisa uma "visão" do nó pai só com os filhos que atendam ao critério? É isso? Talvez você consiga fazer isso com uma das ferramentas de agregação que o Paniz citou.
Esse documento estaria inconsistente caso isso acontecesse. Tem certeza que é isso que você precisa? Ou você só precisa dos nós filhos?
Reply all
Reply to author
Forward
0 new messages