use*_*450 9 mongodb mongodb-query
我正在查看MongoDB关于$和$elemMatch
预测的文档.我试图找出如何仅返回投影数组的字段的子集,但我似乎无法弄明白.
相关文章:
我不是试图从mongodb聚合框架执行$ slice - 获取嵌套数组的第一个文档的字段.
假设我在test集合中有以下文档:
{
"_id": "A",
"array": [
{"key": 1, "name": "foo", "data": {}},
{"key": 2, "name": "bar", "data": {}}
],
"extra": {}
},
{
"_id": "B",
"array": [
{"key": 3, "name": "spam", "data": {}},
{"key": 4, "name": "eggs", "data": {}}
],
"extra": {}
}
Run Code Online (Sandbox Code Playgroud)
我有效地想要执行的查询是:
db.test.findOne({"array.key": 1}, {"array.$.name": 1, "extra": 1})
Run Code Online (Sandbox Code Playgroud)
我希望它只是返回name在数组中的子文件下key了1.例如,
{
"_id": "A",
"array": [
{"name": "foo"}
],
"extra": {}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行该查询,我得到的是:
{
"_id": "A",
"array": [
{"key": 1, "name": "foo", "data": {}}
],
"extra": {}
}
Run Code Online (Sandbox Code Playgroud)
这与执行查询相同:
db.test.findOne({"array.key": 1}, {"array.$": 1, "extra": 1})
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下结果:
db.test.findOne({"array.key": 1}, {"array.$": 1, "array.name": 1, "extra": 1})
Run Code Online (Sandbox Code Playgroud)
有没有办法只返回字段的子集array.$
而不是整个子文档?
小智 7
你是否特意尝试不使用聚合这样做?
db.test.aggregate([{$unwind:"$array"},
{$match:{"array.key":1}},
{$project:{"array.name":1, extra:1}}])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14704 次 |
| 最近记录: |