Mongodb Embedded文档查询

时间:2013-12-11 12:24:11

标签: mongodb

您好我有这样的数据模型

module{
    name: "xx",
    sa: [
        {
            sa_name: "yy",
            fact: [
                fact_name: "zz"
            ],
            dim: [
                dim_name: "qq"
            ]
        }
    ]
}

我嵌入了模块和事实,并在sa中嵌入了暗淡。

我尝试db.coll.find({"module.sa.fact.name":"zz"},{})无效,因为单个db.coll.find({"module.sa.name":"yy"},{})工作正常。 如何在子文档中查询此子文档。

2 个答案:

答案 0 :(得分:5)

将您的查询更新为:

db.coll.find({"module.sa" : {$elemMatch : {"fact.fact_name": "zz"}}})

答案 1 :(得分:2)

对我来说,查询工作正常,请参阅mongo 2.4.8 shell:

> db.coll.insert({module: {name:"xx", sa: [{sa_name:"yy", fact:[{fact_name:"zz"}], dim:[{dim_name:"qq"}]}]}})
> db.coll.findOne()
{
        "_id" : ObjectId("52a85b44fd0b335ab0546ca4"),
        "module" : {
                "name" : "xx",
                "sa" : [
                        {
                                "sa_name" : "yy",
                                "fact" : [
                                        {
                                                "fact_name" : "zz"
                                        }
                                ],
                                "dim" : [
                                        {
                                                "dim_name" : "qq"
                                        }
                                ]
                        }
                ]
        }
}
> db.coll.findOne({"module.sa.fact.fact_name":"zz"})
{
        "_id" : ObjectId("52a85b44fd0b335ab0546ca4"),
        "module" : {
                "name" : "xx",
                "sa" : [
                        {
                                "sa_name" : "yy",
                                "fact" : [
                                        {
                                                "fact_name" : "zz"
                                        }
                                ],
                                "dim" : [
                                        {
                                                "dim_name" : "qq"
                                        }
                                ]
                        }
                ]
        }
}

当你在"module.sa.fact.name"查询它应该是"module.sa.fact.fact_name"时,你是否只是遇到某种拼写错误?但是,对于看起来适合您的查询,这个问题也是如此......