【发布时间】:2025-12-20 00:00:11
【问题描述】:
所以我的收藏看起来像这样:
{
"_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 中完成吗?
【问题讨论】:
-
难道没有
findOne()而不是find()吗? -
@johnny 已经看过了..但对我不起作用
-
您需要在
find或findOne调用中添加投影参数。 -
我找到了使用聚合聚合的解决方案(array(array('$match' => array('_id' => '52722429d874590c15000029')), array('$unwind' => '$products '), array('$match' => array('products._id' => '5272307ad87459401a00002a')), ));