考虑以下文件:
{
"_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
]}
答案 0 :(得分:3)
我相信您在这里寻找$elemMatch
,从而确保对应的AttributeName
和AttributeValue
位于多值字段的同一元素中{{3} }):
{
ItemType: 'Bicycle',
$and:[
{"Attributes": {$elemMatch:{AttributeName: 'With helmet?', AttributeValue: 0 }}},
{ //Next match }
]
}
尝试类似的东西