2016-12-13 52 views
0

我有我的收藏之一,如下所列的文檔。Mongo查詢獲取嵌套的鍵值存在

{"id":"1", "properties":{"type1":{"items":[{"name":"A"},{"name":"B"}]}}} 
    {"id":"2", "properties":{"type2":{"tasks":[{"name":"X"},{"name":"Y"}, {"name":"Z"}]}}} 
    {"id":"3", "properties":{"type3":{"categories":[{"name":"A"},{"name":"P"}, {"name":"Q"}, {"name":"R"}]}}} 
    {"id":"4", "properties":{"type4":{"list":[{"name":"D"},{"name":"B"}, {"name":"C"}, {"name":"A"}]}}} 

我可以寫一個Mongo find查詢來列出所有包含「name」的文檔:「A」嗎?請讓我有效地做到這一點。

我可以想到創建具有所有可能組合的標準並將它們作爲OR條件的可能性。但我不確定效率和性能。

任何利用動態鍵和嵌套組合獲得這些文檔列表的任何線索都是非常有用的。

感謝

+0

我可以知道爲什麼這個問題給出-1嗎?這是無效的嗎? –

回答

0

由於在嵌套的每一步不同的鍵名,有檢查包含「名」的文件沒有直接的方法:「A」。您必須爲每個文檔編寫正確的步驟。像文件1,你將不得不寫

db.f1.find({"properties.type1.items.name":"A"}) 

,然後只將顯示文件1.所以,要檢查所有文件,你將不得不使用$或者像我這裏使用的文檔1和文件3 。

db.f1.find({$or:[{"properties.type1.items.name":"A"},{"properties.type3.categories.name":"A"}]})