Mongodb 如何将文档数组转换为二维数组
我正在向MongoDB查询Mongodb 如何将文档数组转换为二维数组,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我正在向MongoDB查询 db.getCollection('user_actions').aggregate([ {$match: { type: 'play_started', entity_id: {$ne: null} }}, {$group: { _id: '$entity_id', view_count: {$sum: 1} }}, ]) 以及获取包含两个字段的文档列表: 如何获
db.getCollection('user_actions').aggregate([
{$match: {
type: 'play_started',
entity_id: {$ne: null}
}},
{$group: {
_id: '$entity_id',
view_count: {$sum: 1}
}},
])
以及获取包含两个字段的文档列表:
如何获得包含两个项目的列表,如
[[entity_id, view_count], [entity_id, view_count], ...]
实际上,根据您的MongoDB服务器版本,有两种不同的方法来实现这一点 最佳方法是在MongoDB 3.2中使用方括号
[]
直接在stage中创建新的数组字段。这将为每个组返回一个数组。下一个阶段是另一个$group
阶段,您可以在其中对文档进行分组,并使用累加器操作符返回二维数组
db.getCollection('user_actions')。聚合([
{“$match”:{
“类型”:“开始播放”,
“实体id”:{“$ne”:null}
}},
{“$组”:{
“\u id”:“$entity\u id”,
“查看计数”:{“$sum”:1}
}},
{“$project”:{
“_id”:0,
“结果”:[“$\u id”、“$view\u count”]
}},
{“$group”:{
“_id”:空,
“结果”:{“$push”:“$result”}
}}
])
从MongoDB 2.6到3.2之前,您需要一种不同的方法。要创建数组,需要使用运算符。由于
$map
“input”字段必须解析为和数组,因此需要使用运算符将文字数组值设置为input
。当然,这里的运算符会根据“布尔表达式”返回“实体id”或“视图计数”
db.getCollection('user_actions')。聚合([
{“$match”:{
“类型”:“开始播放”,
“实体id”:{“$ne”:null}
}},
{“$组”:{
“\u id”:“$entity\u id”,
“查看计数”:{“$sum”:1}
}},
{“$project”:{
“_id”:0,
“结果”:{
“$map”:{
“输入”:{“$literal”:[“A”,“B”]},
“as”:“el”,
“在”:{
“$cond”:[
{“$eq”:[“$$el”,“A”]},
“$\u id”,
“$view\u count”
]
}
}
}
}},
{“$group”:{
“_id”:空,
“结果”:{“$push”:“$result”}
}}
])
值得注意的是,这也将在MongoDB 2.4中起作用。如果您运行的是MongoDB 2.2,则可以使用未记录的
$const
运算符,该运算符也可以执行相同的操作。请发布一些示例文档。