2013-10-31 51 views
1

所以我收藏的是这样的:MongoDB中只有一个元素从数组返回

{ 
    "_id" : ObjectId("52722429d874590c15000029"), 
    "name" : "Bags", 
    "products" : [{ 
     "_id" : ObjectId("527225b5d87459b802000029"), 
     "name" : "Prada", 
     "description" : "Prada Bag", 
     "points" : "234", 
     "validDate" : 1382562000, 
     "link" : "dasdad", 
     "code" : "423423424", 
     "image" : null 
    }, { 
     "_id" : ObjectId("5272307ad87459401a00002a"), 
     "name" : "Gucci", 
     "description" : "Gucii bag", 
     "points" : "2342", 
     "validDate" : 1383170400, 
     "link" : "dsadada", 
     "code" : "2342", 
     "image" : null 
    }] 
} 

,我想不仅是产品与_id 527225b5d87459b802000029,我尝试这样做:

$this->find(array(
       '_id' => new \MongoId('52722429d874590c15000029'), 
       'products._id' => new \MongoId('527225b5d87459b802000029') 
       )); 

但它会返回该集合的整个数组,并且我只想要一个...可以在mongo中完成这项工作吗?

+0

是不是有一个'findOne()'代替'找到()'? – DanFromGermany

+0

可能重复的[MongoDB只提取数组中的选定项](http://stackoverflow.com/questions/3985214/mongodb-extract-only-the-selected-item-in-array) – JohnnyHK

+0

是的,findOne对不起 – user2885793

回答

1

正如评论中提到的,您必须添加一个投影,更确切地说是一个$elemMatch。在这种情况下不需要使用聚合框架。

例子:

find({ _id: 1, "products._id": 4 }, { products: { $elemMatch: { _id: 4 } } }).pretty() 
相关问题