2013-08-25 127 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}) 

字段名稱應該是裏面的「「!否則它會拋出語法錯誤。