2013-08-25 99 views
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.但它不起作用。任何想法? PS:我预计一些答案说这样一个存储产品的分贝设计是非常糟糕的,我同意;但是,这只是一个例子来说明我想要执行的查询类型。

+0

位置运算符($)匹配数组中的元素。在你的情况'product_type'不是一个数组。即使是正在尝试的find()查询(给定'product_type'是一个数组)。 –

+0

谢谢!发现了另一篇关于这个话题的文章。 http://stackoverflow.com/questions/6179871/mongodb-wildcard-in-the-key-of-a-query – gwendall

回答

2

MongoDB不支持任何类型的通配符属性,例如您在中试图执行的操作。但是,您可以使用$or运营商搜索多个属性:

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

但是,这是要在全返回匹配的文档,而不是只匹配的数组元素,所以你也必须进行后处理的文档在你的代码中将它们拉出来。

0

与嵌入文档搜索可以做到

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

字段名称应该是里面的““!否则它会抛出语法错误。