mongodb子元素查询

Nic*_*ers 4 mongodb

这是一个例子

> db.test.insert({ name: 'test', values: [ { check: true }, { check: false } ] })
> db.find({ values.check: true })[0]
Run Code Online (Sandbox Code Playgroud)

所以我得到真假check:

{
        "_id" : ObjectId("50e22046dc278908f3a38a8e"),
        "name" : "test",
        "values" : [
                {
                        "check" : true
                },
                {
                        "check" : false
                }
        ]
}
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

{
        "_id" : ObjectId("50e22046dc278908f3a38a8e"),
        "name" : "test",
        "values" : [
                {
                        "check" : true
                }
        ]
}
Run Code Online (Sandbox Code Playgroud)

有什么过滤器命令吗?

Joh*_*yHK 5

您可以使用$投影运算符仅包含values与查询匹配的第一个数组元素:

 db.test.find({ 'values.check': true }, {name: 1, 'values.$': 1})
Run Code Online (Sandbox Code Playgroud)

收益:

{
    "_id": ObjectId("50e22046dc278908f3a38a8e"), 
    "name": "test", 
    "values": [ { "check": true } ] }
Run Code Online (Sandbox Code Playgroud)


Nic*_*ers 0

> db.test.aggregate(
{ $unwind: "$values" },
{ $match: { "values.check": true } }
).result

[
        {
                "_id" : ObjectId("50e22046dc278908f3a38a8e"),
                "name" : "test",
                "values" : {
                        "check" : true
                }
        }
]
Run Code Online (Sandbox Code Playgroud)