mongodb子元素查询

时间:2012-12-31 03:40:42

标签: mongodb

这是示例

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

所以我得到了真假check

{
        "_id" : ObjectId("50e22046dc278908f3a38a8e"),
        "name" : "test",
        "values" : [
                {
                        "check" : true
                },
                {
                        "check" : false
                }
        ]
}

我希望得到这个:

{
        "_id" : ObjectId("50e22046dc278908f3a38a8e"),
        "name" : "test",
        "values" : [
                {
                        "check" : true
                }
        ]
}

是否有任何过滤器命令?

3 个答案:

答案 0 :(得分:5)

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

 db.test.find({ 'values.check': true }, {name: 1, 'values.$': 1})

返回:

{
    "_id": ObjectId("50e22046dc278908f3a38a8e"), 
    "name": "test", 
    "values": [ { "check": true } ] }

答案 1 :(得分:0)

$fetchcode = "Fetch an array from the mongo db"
   foreach ($fetchcode as $mainkey => $mainVariable) {
        foreach($mainVariable as $key2 => $doc2)
        {
            if($key2 == "check"){
                if($doc2 == "true")
                {
                   //Your Function Here
                }
            }
        }
    }

你可以试试这个

答案 2 :(得分:0)

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

[
        {
                "_id" : ObjectId("50e22046dc278908f3a38a8e"),
                "name" : "test",
                "values" : {
                        "check" : true
                }
        }
]