我正在查看有关$
和$elemMatch
预测的MongoDB文档。我试图弄清楚如何仅返回投影数组的字段的子集,但似乎无法弄清楚。
相关文章:
我不是想从mongodb聚合框架执行$ slice-获取嵌套数组的第一个文档的字段。
我也不想尝试从mongo投影中的“仅返回数组”值中展平子文档,因为我仍然想要顶部文档中的某些字段。
假设我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": {}
}
我实际上要执行的查询是:
db.test.findOne({"array.key": 1}, {"array.$.name": 1, "extra": 1})
我希望它只返回name
数组key
was中的子文档下的内容1
。例如,
{
"_id": "A",
"array": [
{"name": "foo"}
],
"extra": {}
}
但是,如果执行该查询,则会得到以下信息:
{
"_id": "A",
"array": [
{"key": 1, "name": "foo", "data": {}}
],
"extra": {}
}
这与执行查询相同:
db.test.findOne({"array.key": 1}, {"array.$": 1, "extra": 1})
我还尝试了以下结果相同的结果:
db.test.findOne({"array.key": 1}, {"array.$": 1, "array.name": 1, "extra": 1})
有没有一种方法只返回字段的子集array.$
而不是整个子文档?
您是否专门尝试在不使用聚合的情况下执行此操作?
db.test.aggregate([{$unwind:"$array"},
{$match:{"array.key":1}},
{$project:{"array.name":1, extra:1}}])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句