gpt4 book ai didi

mongodb - 在聚合 $group 中使用 $map

转载 作者:行者123 更新时间:2023-12-02 02:12:52 24 4
gpt4 key购买 nike

我需要分析一些 mongo 数据库集合。我需要提取集合的名称和值。

这是我得到的结果:

db.collection(coll.name)
.aggregate([
{ $project: { arrayofkeyvalue: { $objectToArray: '$$ROOT' } } },
{ $unwind: '$arrayofkeyvalue' },
{
$group: {
_id: null,
allkeys: { $addToSet: '$arrayofkeyvalue.k' },
},
},
])
.toArray();

这很好用。我得到所有的 key 。但是我也想获得这些值。

所以,我想到了“小菜一碟”并将 allkeys 部分替换为 allkeysandvalues 部分,这应该创建一个包含键值对的映射。

像这样:

db.collection(coll.name)
.aggregate([
{ $project: { arrayofkeyvalue: { $objectToArray: '$$ROOT' } } },
{ $unwind: '$arrayofkeyvalue' },
{
$group: {
_id: null,
allkeysandvalues: {
$map: {
input: '$arrayofkeyvalue',
as: 'kv',
in: {
k: '$$kv.k',
v: '$$kv.v',
},
},
},
},
},
])
.toArray();

但这行不通。我收到错误消息

MongoError: unknown group operator '$map'

有谁知道热解决这个问题吗?

最佳答案

$group流水线阶段需要累加器表达式 所以你必须使用$push而不是 $map:

{
$group: {
_id: null,
allkeysandvalues: {
$push: "$arrayofkeyvalue"
}
}
}

{
$group: {
_id: null,
allkeysandvalues: {
$push: {
k: "$arrayofkeyvalue.k",
v: "$arrayofkeyvalue.v"
}
}
}
}

返回相同的结果。

请注意 arrayofkeyvalue 是一个对象,因为您在 $group 之前运行 $unwind

Mongo Playground

关于mongodb - 在聚合 $group 中使用 $map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67516488/

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