Php MongoDb只返回数组中的一个元素

Php MongoDb只返回数组中的一个元素,php,mongodb,nosql,Php,Mongodb,Nosql,所以我的收藏看起来像这样: { "_id" : ObjectId("52722429d874590c15000029"), "name" : "Bags", "products" : [{ "_id" : ObjectId("527225b5d87459b802000029"), "name" : "Prada", "description" : "Prada Bag", "points" : "234", "validDa

所以我的收藏看起来像这样:

{
  "_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中完成吗?

如评论中所述,您必须添加一个投影,更准确地说是一个。在这种情况下,不需要使用聚合框架

例如:

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

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

例如:

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

是不是有一个
findOne()
而不是
find()
?可能重复的@johnny已经在那里看过了..但是对我不起作用你需要在你的
find
findOne
调用中添加一个投影参数。我使用聚合(数组('$match'=>数组)找到了解决方案(“$id”=>“52722429d874590c15000029”)、数组(“$unwind”=>“$products”)、数组(“$match”=>array('products.\U id”=>“5272307ad87459401a00002a”)、数组(“$match”=>“products”));不存在一个
findOne()
而不是
find()
?可能重复的@johnny已经在那里查看过了..但对我不起作用您需要在
find
findOne
调用中添加一个投影参数。我使用聚合聚合(数组('$match'=>array('u id'=>'52722429d874590c1500029')找到了解决方案,数组(“$unwind”=>“$products”)、数组(“$match”=>array('products.\u id'=>“5272307ad87459401a00002a”)、);