0

この情報を含むデータベースを取得しました:

{"_id":1, "test":6,"foo":[{"mom":5,"dad":10},{"mom":7, "dad":12}]}
{"_id":2, "test":9,"foo":[{"mom":6,"dad":20},{"mom":7, "dad":15}]}
{"_id":3, "test":10, "foo":[{"mom":10,"dad":13},{"mom":2, "dad":19}]}

そして、mom=7 で db から mongo をクエリします。

cursor = foo.find({"foo.mom":7},{"foo.$":1,"_id":0, "test":1})
for key in cursor:
    print key

それは私にこれを印刷します:

{"test":6,"foo":[{"mom":7, "dad":12}]}
{"test":9,"foo":[{"mom":7, "dad":15}]}

私が使用する場合

print key['test']

「テスト」のみの結果を取得します

したがって、問題は次のとおりです。次のような結果を得るにはどうすればよいですか。

{"test":6,"foo":[{"dad":12}]}
{"test":9,"foo":[{"dad":15}]}

使ってみた

print key["foo.dad"]

しかし、それはエラーを返すだけです

4

1 に答える 1

3

"foo" の値は配列に保存されるため、key['foo'][0]['dad'] を使用して、結果から 'dad' の値を出力する必要があります。

私が使用したコードは次のようなものです:

cursor = foo.find({"foo.mom":7},{"foo.$":1,"_id":0, "test":1})
for key in cursor:
    print key
    print key['test']
    print key['foo'][0]['dad']

そして、私が得た結果は次のようになります。

{u'test': 6.0, u'foo': [{u'dad': 12.0, u'mom': 7.0}]}
6.0
12.0
{u'test': 9.0, u'foo': [{u'dad': 15.0, u'mom': 7.0}]}
9.0
15.0

「お母さん」フィールドなしで結果を取得したい場合:

{"test":6,"foo":[{"dad":12}]}
{"test":9,"foo":[{"dad":15}]}

集約フレームワークを使用できます。

db.foo.aggregate([
    { $unwind : "$foo" },
    { $match : { "foo.mom" : 7 }}, 
    { $project : { 
          _id : 0,
          test : 1,
          "foo.dad" : "$foo.dad"
    }}, 
])

結果は次のとおりです。

{
    "result" : [
        {
            "test" : 6,
            "foo" : {
                "dad" : 12
            }
        },
        {
            "test" : 9,
            "foo" : {
                "dad" : 15
            }
        }
    ],
    "ok" : 1
}
于 2013-04-17T05:22:16.070 に答える