Mongodb如何查询内嵌数组的指定元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb如何查询内嵌数组的指定元素?相关的知识,希望对你有一定的参考价值。


"_id" : ObjectId("459a36c0e21386293cc565ce"),
"Name" : "来兴供水站",
"GoodsList" : [
"_id" : "1167728193873",
"Title" : "农夫山泉",
"InPrice" : 2.3,
"OutPrice" : 36.0,
"SugPrice" : 0.0,
"IsForced" : "1",
,
"_id" : "1167728229225",
"Title" : "云南山泉",
"InPrice" : 12.0,
"OutPrice" : 16.0,
"SugPrice" : 16.0,
"IsForced" : "1",
,
"_id" : "11677558775501158654936",
"Title" : "鸡足山矿泉水",
"InPrice" : 10.0,
"OutPrice" : 36.0,
"SugPrice" : 0.0,
"IsForced" : "0",
],

如上结构,如何查询出GoodsList中title为“鸡足山矿泉水“的嵌套数据?

"_id" : "11677558775501158654936",
"Title" : "鸡足山矿泉水",
"InPrice" : 10.0,
"OutPrice" : 36.0,
"SugPrice" : 0.0,
"IsForced" : "0",

参考技术A php中是这样的 find(array("GoodsList.title" => "鸡足山矿泉水"))

Mongodb内嵌数组的完全匹配查询

样例数据:


    "cNo" : "11",
    "Details" : [
        {
             "dDate" : ISODate("2017-04-01T00:00:00.000+0800"),
             "bNo" : "No00000000497"
        },
        {
             "dDate" : ISODate("2017-05-01T00:00:00.000+0800"),
             "bNo" : "No00000000497"
        },
        {
            "dDate" : ISODate("2017-06-01T00:00:00.000+0800"),
             "bNo" : "No00000000497"
        }
    ]
}
{
    "cNo" : "12",    
    "Details" : [
        {
            "dDate" : ISODate("2017-04-01T00:00:00.000+0800"),
            "bNo" : "No00000000497"
        },
        {
            "dDate" : ISODate("2017-05-01T00:00:00.000+0800"),
            "bNo" : "No00000000497"
        },
        {
            "dDate" : ISODate("2017-06-01T00:00:00.000+0800"),
            "bNo" : "No00000000500"
        }
    ]
}

    "cNo" : "13",
    "Details" : [
        {
            "dDate" : ISODate("2017-04-01T00:00:00.000+0800"),
            "bNo" : "No00000000497"
        },
        {
            "dDate" : ISODate("2017-05-01T00:00:00.000+0800"),
            "bNo" : "No00000000497"
        },
         {
            "dDate" : ISODate("2017-06-01T00:00:00.000+0800"),
            "bNo" : "No00000000497"
        }
    ]
}

查询条件:dDate等于2017-06-01,且bNo等于No00000000497的数据

正确查询语句:{Details:{ $elemMatch:{ "bNo":"No00000000497","dDate":  ISODate("2017-10-01T00:00:00.000+0800") } }}

查询结果:11、13

(非完全匹配/错误)查询语句:{"Details.bNo":"No00000000497","Details.dDate":ISODate("2017-10-01T00:00:00.000+0800")}

查询结果:11、12、13

以上是关于Mongodb如何查询内嵌数组的指定元素?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 数组字段的查询和更新

Mongodb内嵌数组的完全匹配查询

MongoDB对数组元素及内嵌文档进行增删改查操作

mongodb对数组元素及内嵌文档进行增删改查操作(转)

mongodb中$push和$pull的使用,向内嵌的数组中删除和添加元素

mongodb 查询数组内符合条件的值