免得说我有像
这样的数据[{
_id: 1,
items: [
{a: 1, b: 2},
{a: 2, b: 2},
{a: 15, b: 7}
]
}, {
_id: 2,
items: [
{a: 15, b: 9},
{a: 15, b: 9},
{a: 41, b: 9}
]
}]
我想要items.a元素,所以我得到了
[[
1,
2,
15
], [
15,
15,
41
]]
我知道
db.collection.find({}, {"items.a": true, "_id": false})
将返回
[{
items: [
{a: 1},
{a: 2},
{a: 15}
]
}, {
items: [
{a: 15},
{a: 15},
{a: 41}
]
}]
这不是我想要的。
是否值得在MongoDB中计算它,或者我可以用Python计算它?
编辑: 如果我想通过例如检查它会怎样:返回包含items.a:1
的每个列表所以结果应该是那种情况
[[
1,
2,
15
]]
答案 0 :(得分:1)
您可以运行以下聚合管道,该管道在 $map
管道中使用 $group
运算符来为映射元素创建值数组嵌入文档a
字段:
db.collection.aggregate([
{
"$group": {
"_id": null,
"elements": {
"$push": {
"$map": {
"input": "$items",
"as": "item",
"in": "$$item.a"
}
}
}
}
}
])
示例输出:
{
"_id" : null,
"elements" : [
[
1,
2,
15
],
[
15,
15,
41
]
]
}
如果您只想返回其中一个元素值为1的所有项目,则需要在分组之前放置 $match
过滤器,如以下内容:
db.collection.aggregate([
{ "$match": { "items.a": 1 } },
{
"$group": {
"_id": null,
"elements": {
"$push": {
"$map": {
"input": "$items",
"as": "item",
"in": "$$item.a"
}
}
}
}
}
])
示例输出
{
"_id" : null,
"elements" : [
[
1,
2,
15
]
]
}