0

次のドキュメントを検討してください。

{
    "_id" : ObjectId("5130f9a677e23b11503fee55"),
    "ItemType" : "Bicycle"
     "Attributes" : [{
         "AttributeName" : "Spare Tire",
         "AttributeValue" : "1"
     }, {
         "AttributeName" : "With helmet?",
         "AttributeValue" : "0"
     }, {
         "AttributeName" : "Number of Locks",
         "AttributeValue" : "1"
     }]
}

スペアタイヤとヘルメットのない自転車を入手するためのクエリを作成するにはどうすればよいですか?

次のことを試しましたが、欲しいものが得られません。

{ 
"$and" : 
[ 
    { "ItemType" : "Bicycle" }, 
    { "$and": 
        [{ "Attributes.AttributeName" : "With helmet?" }, 
         { "Attributes.AttributeValue" : "0" }
   ]},
    { "$and": 
        [{ "Attributes.AttributeName" : "Spare Tire" }, 
         { "Attributes.AttributeValue" : "1" }
   ]}
]}

一致する値がある限り(Attributes.AttributeValue付随するものに関係なく)、Attributes.AttributeNameそのドキュメントを返すようです。これは、次のクエリを実行するようなものです。

{ 
"$and" : 
[ 
    { "ItemType" : "Bicycle" },                        //true
    { "Attributes.AttributeName" : "With helmet?" },   //true 
    { "Attributes.AttributeName" : "Spare Tire" },     //true
    { "Attributes.AttributeValue" : "0" },             //any
    { "Attributes.AttributeValue" : "1" }              //any
]}
4

1 に答える 1

3

ここであなたが探していると思います。これにより、対応するものが複数値フィールドの同じ要素にあること$elemMatchが確認されます( http://docs.mongodb.org/manual/reference/operator/elemMatch/):AttributeNameAttributeValue

{
    ItemType: 'Bicycle', 
    $and:[
        {"Attributes": {$elemMatch:{AttributeName: 'With helmet?', AttributeValue: 0 }}},
        { //Next match }
    ]
}

そのようなことを試してください

于 2013-03-04T13:28:53.853 に答える