2013-03-25 57 views
4

所以我通過id從貓鼬中查詢了一個特定的文檔。該文件包含一系列項目。此列表將始終非常小(少於10個項目)。我想知道是否有辦法從數組中獲取特定項目。貓鼬,在文檔數組中查找項目

Example doc: 
{ 
    _id: 1, 
    name: 'some name, 
    items: [{ 
     id: 23, 
     name: 'item name 23' 
    },{ 
     id: 24, 
     name: 'item name 24' 
    }] 
} 

從貓鼬的文檔,我可以得到的物品數組:

doc.get('items') 

從那裏我可以在陣列上進行迭代,並找到我想要的東西,這也沒什麼大不了的。如果在框架中提供了這些,只是不想重新發明輪子。

+0

如果你知道位置,你可以使用「點符號」(例如'items.0')http://docs.mongodb.org/manual/core/read-operations/#arrays – 2013-03-25 19:38:07

+0

我不想要按位置查找,我想按ID查找。 I.E. doc.get( '項目')找到(23)。當然,這不僅僅是我想要做的一個例子。 – lostintranslation 2013-03-25 20:06:09

+0

我認爲該解決方案發布[這裏](http://stackoverflow.com/questions/15213089/mongodb-mongoose-find-object-based-on-array-element-return-only-matching-array)。 – Volox 2013-07-17 07:34:24

回答

12

我認爲它會工作。

Document.findById({docId, 'items.id': 'yourId'}, {'items.$': 1}, function(err, item){ 

} 
+3

如果它工作,我認爲你可以檢查它作爲接受的答案。謝謝 – Leonardo 2014-06-15 06:18:42

+0

是否有可能只獲取所需的字段? – 2016-06-28 10:34:51

+0

@AryehArmon我認爲你可以像包含任何其他查詢一樣包含必要的字段:'''包含字段名,並排除其餘的字段名,0字段排除字段名。 – hoodsy 2016-10-24 21:53:44