【发布时间】:2016-03-16 11:14:22
【问题描述】:
在这个例子中可以返回特定的数组项吗?我在 PHP 中使用 mongo 版本 3 (3.0.4) 和 mongoDB 驱动程序版本 1.6.11。
我在 mongo 集合中有这个对象:
{
"_id": ObjectId('56e9247287f5204c0a000001'),
"name": "test name",
"folders": [
{
"name": "folder name",
"items": [
{
"name": "item 1",
"internalID": 1
},
{
"name": "item 2",
"internalID": 2
},
{
"name": "item 3",
"internalID": 3
},
{
"name": "item 4",
"internalID": 4
}
]
}
]
}
我需要找到并返回对象,其中一项是 internalID = 2.. 结果应该是这样的:
{
"_id": ObjectId('56e9247287f5204c0a000001'),
"items": [
{
"name": "item 2",
"internalID": 2
},
]
}
下面的代码不起作用,返回包含所有项目的完整对象。
$collection->find(
[
'folders.items.internalID' => 2,
],
[
'folders' => [
'$elemMatch' => [
'items.internalID' => 2
]
]
]
);
你能帮帮我吗? mongodb中的数组是否可以只返回一个匹配项?
谢谢!
【问题讨论】:
-
请提及您的 MongoDB 和驱动程序版本
-
我在 PHP 中使用的是 mongo 版本 3 (3.0.4) 和 mongoDB 驱动程序版本 1.6.11。
-
$itemMatch检查数组内部的值是否匹配。它不会限制您的数组选择。 -
为什么不直接使用投影$elemMatch?你不需要聚合框架。docs.mongodb.org/manual/reference/operator/projection/elemMatch
标签: php mongodb mongodb-query aggregation-framework mongodb-php