我正在尝试使用类似于以下结构的MongoDB集合进行过滤:
{
Name: "My Item",
Attributes: [{
AttributeId: 1,
Values: [{
Name: "Book",
P: 10
},
{
Name: "Series",
P: 100
}]
},
{
AttributeId: 2,
Values: [{
Name: "Pen",
P: 10
},
{
Name: "Dozen",
P: 100
}]
}]
}
我要获取的所有文档的AttributeId:1并在其中包含一个名为“ Book”的值。
我已经尝试过该过滤器,但未返回任何结果:
{"ProductAttributeMappings.ProductAttributeId": 32,"ProductAttributeMappings.$.ProductAttributeValues.Name":"Book"}
答案 0 :(得分:1)
如果我对您的理解正确,那么您正在尝试这样做:
此查询在Attributes
数组中进行检查以匹配两个条件(Attribute == 32和Values.Name == Book)
db.ProductAttributeMappings.find({
Attributes: {
$elemMatch: {
AttributeId: 32,
Values: {
$elemMatch: {
Name: "Book"
}
}
}
}
})
但是,此查询在整个顶级文档中检查是否有数组满足查询条件:
db.ProductAttributeMappings.find({
"Attributes.AttributeId": 32,
"Attributes.Values.Name": "Book"
})
答案 1 :(得分:1)
您需要elemMatch运算符:
{Attributes: {$elemMatch: {AttributeId: 1, "Values.Name": "Book"}}}