查询任何嵌套的子文档

时间:2013-08-25 14:46:24

标签: mongodb

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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