0

我想对多个子文档上的给定嵌套值执行查询。

在下面的示例中,我想跨多个“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:我预计一些答案会说这种存储产品的数据库设计会非常糟糕,我同意;这只是一个示例来说明我想要执行的查询类型。

4

2 回答 2

2

MongoDB 不支持任何类型的通配符属性,就像您在这里尝试使用$. 但是,您可以使用$or运算符搜索多个属性:

db.inventory.find({ $or: [
  { product_types.type_1.price: 100 },
  { product_types.type_2.price: 100 }
]})

但这将完整返回匹配的文档,而不仅仅是匹配的数组元素,因此您还必须对代码中的文档进行后处理以将其提取出来。

于 2013-08-25T15:38:07.780 回答
0

使用嵌入文档进行搜索可以如下完成

db.inventory.find({"product_types.type_1.price":100})

字段名应该在“”里面!否则会抛出语法错误。

于 2015-08-16T11:15:03.027 回答