我想对多个子文档上的给定嵌套值执行查询。
在下面的示例中,我想跨多个“product_types”对象执行搜索。
{
"product_types": {
"type_1": [
{
name: "something",
price: 100
},
{
name: "something else",
price: 50
}
],
"type_2": [
{
name: "another one",
price: 20
},
{
name: "and a last one",
price: 30
}
]
}
}
我知道美元符号匹配任何子文档。以下是我想出的所有产品的“价格”值为100.但它不起作用。有什么想法吗?
db.inventory.find( { product_types.$.price : 100 } )
PS:我预计会有一些答案说这种存储产品的数据库设计非常糟糕,我同意;这只是一个例子来说明我想要执行的查询类型。
答案 0 :(得分:2)
MongoDB不支持任何类型的通配符属性,就像您尝试使用$
一样。但是,您可以使用$or
运算符搜索多个属性:
db.inventory.find({ $or: [
{ product_types.type_1.price: 100 },
{ product_types.type_2.price: 100 }
]})
但是这将完全返回匹配的文档,而不仅仅是匹配的数组元素,因此您还必须对代码中的文档进行后期处理以将其拉出来。