2013-03-25 71 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