gpt4 book ai didi

MongoDB 扁平化字典列表中某些字段的结果列表

转载 作者:可可西里 更新时间:2023-11-01 10:41:33 25 4
gpt4 key购买 nike

别说我有这样的数据

[{
_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
]]

最佳答案

您可以运行以下使用 $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
]
]
}

关于MongoDB 扁平化字典列表中某些字段的结果列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42011647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com