4

这是示例

> 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
                }
        ]
}

是否有任何过滤命令?

4

3 回答 3

5

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

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

返回:

{
    "_id": ObjectId("50e22046dc278908f3a38a8e"), 
    "name": "test", 
    "values": [ { "check": true } ] }
于 2012-12-31T04:51:09.507 回答
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
                }
            }
        }
    }

你可以试试这个

于 2012-12-31T03:50:18.553 回答
0
> db.test.aggregate(
{ $unwind: "$values" },
{ $match: { "values.check": true } }
).result

[
        {
                "_id" : ObjectId("50e22046dc278908f3a38a8e"),
                "name" : "test",
                "values" : {
                        "check" : true
                }
        }
]
于 2012-12-31T18:49:02.143 回答