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 に答える