2017-06-06 41 views
0

試圖找到一種方法來達到子子字段之間的動態子字段。不知道如何到達那裏。尋找像$用於數組的東西。MongoDB通過嵌套動態子字段進行搜索

我的數據結構如下所示

{ 
    _id: ObjectId("59355deee13f1a1260f17421"), 
    product: {  
     shirt: { 
     color: "black" 
     } 
    } 
    }, 
    { 
    _id: ObjectId("59355deee13f1a1260f17422"), 
    product: {  
     top: { 
     color: "red" 
     } 
    } 
    }, 
    { 
    _id: ObjectId("59355deee13f1a1260f17423"), 
    product: {  
     shoes: { 
     color: "black" 
     } 
    } 
    }, 
    { 
    _id: ObjectId("59355deee13f1a1260f17424"), 
    product: {  
     belt: { 
     color: "brown7" 
     } 
    } 
    }, 

尋找的

db.things.find({product.$.color: "black"}) 

回答

2

這應該工作

db.getCollection('things').find({$where: function() { 
for (var field in this.product) { 
    if (this.product[field].color == "black") return true; 
} 
return false; 

}})

+0

謝謝!謝謝 !!謝謝 !!! 正是我在找的東西。 –

+0

現在我正在尋找適合在芒果糖 –

+0

這很高興它幫助.. !!。你能夠適應這個貓鼬? –

0

等效上述文件,因爲所有的數據屬於共同的實體,在查詢數據有利於方便性可以被表示爲一個嵌入的文檔從使用$elemMatch運算符的嵌入式文檔。它的表示應該如下所示。

{ 
    "_id": ObjectId("59355deee13f1a1260f17421"), 
    "product": [{ 
      "name": "shirt", 
      "color": "black" 
     }, 
     { 
      "name": "top", 
      "color": "red" 
     }, 
     { 
      "name": "shoes", 
      "color": "black" 
     }, 
     { 
      "name": "belt", 
      "color": "brown7" 
     } 
    ] 
} 

根據描述在上面提到的問題,獲取文件中色域的值是黑色的請嘗試在MongoDB中殼執行下面的查詢。

db.things.find({product:{$elemMatch:{color:'black'}}})