gpt4 book ai didi

mongodb - 如何将文档数组转换为二维数组

转载 作者:可可西里 更新时间:2023-11-01 10:22:51 31 4
gpt4 key购买 nike

我正在查询 MongoDB

db.getCollection('user_actions').aggregate([
{$match: {
type: 'play_started',
entity_id: {$ne: null}
}},
{$group: {
_id: '$entity_id',
view_count: {$sum: 1}
}},
])

并获取包含两个字段的文档列表:

enter image description here

如何获得包含两个项目的列表列表

[[entity_id, view_count], [entity_id, view_count], ...]

最佳答案

实际上有两种不同的方法可以做到这一点,具体取决于您的 MongoDB 服务器版本。

最佳方式是在 MongoDB 3.2 中使用方括号 [] 直接在 $project 中创建新的数组字段阶段。这将为每个组返回一个数组。下一阶段是另一个 $group 阶段,您可以在该阶段对文档进行分组并使用 $push返回二维数组的累加器运算符。

db.getCollection('user_actions').aggregate([
{ "$match": {
"type": 'play_started',
"entity_id": { "$ne": null }
}},
{ "$group": {
"_id": "$entity_id",
"view_count": { "$sum": 1}
}},
{ "$project": {
"_id": 0,
"result": [ "$_id", "$view_count" ]
}},
{ "$group": {
"_id": null,
"result": { "$push": "$result" }
}}
])

从 MongoDB 2.6 到 3.2 之前,您需要一种不同的方法。为了创建您的阵列,您需要使用 $map运算符(operator)。因为 $map“输入”字段必须解析为您需要使用的数组 $literal运算符将文字数组值设置为 input。当然是 $cond这里的运算符根据“ bool 表达式”返回“entity_id”或“view_count”。

db.getCollection('user_actions').aggregate([
{ "$match": {
"type": 'play_started',
"entity_id": { "$ne": null }
}},
{ "$group": {
"_id": "$entity_id",
"view_count": { "$sum": 1}
}},
{ "$project": {
"_id": 0,
"result": {
"$map": {
"input": { "$literal": [ "A", "B"] },
"as": "el",
"in": {
"$cond": [
{ "$eq": [ "$$el", "A" ] },
"$_id",
"$view_count"
]
}
}
}
}},
{ "$group": {
"_id": null,
"result": { "$push": "$result" }
}}
])

值得注意的是,这也适用于 MongoDB 2.4。如果您运行的是 MongoDB 2.2,则可以使用未记录的 $const 运算符来做同样的事情。

关于mongodb - 如何将文档数组转换为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37137314/

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