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”)、);