mongodb - $group 需要一个 _id 数组,但 $out 不会处理它

标签 mongodb aggregation-framework

我需要对数组出现的次数求和。我需要将其输出到一个集合中,但是当我尝试使用 $out 关键字时,它失败并显示“不能将数组用于 _id\”

有没有办法将小组赛阶段的_id字段的值投影到一个新的key中,并创建一个新的_id

db.djnNews_filtered.aggregate([
{$unwind:"$processed_text.headline_trigrams"},
{$group:{_id:"$processed_text.headline_trigrams","num":{$sum:1}}},
{$sort:{"num":-1}}
])

{ "_id" : [ "Reports", "First", "Quarter" ], "num" : 279 }
{ "_id" : [ "ST", "upside", "prevails" ], "num" : 167 }
{ "_id" : [ "First", "Quarter", "Results" ], "num" : 160 }
{ "_id" : [ "Announces", "First", "Quarter" ], "num" : 155 }


db.djnNews_filtered.aggregate([
{$unwind:"$processed_text.headline_trigrams"},
{$group:{_id:"$processed_text.headline_trigrams","num":{$sum:1}}},
{$sort:{"num":-1}},
{$out:"new_collection"}
])

assert: command failed: {
    "errmsg" : "exception: insert for $out failed: { connectionId: 3, err: \"can't use an array for _id\", code: 2, n: 0, ok: 1.0 }",
    "code" : 16996,
    "ok" : 0
} : aggregate failed

最佳答案

在 MongoDB 中,您不能拥有包含数组形式的 _id 的文档。

你能简单地将数组 $project 到不同的字段吗?

db.djnNews_filtered.aggregate([
  {$unwind:"$processed_text.headline_trigrams"},
  {$group:{_id:"$processed_text.headline_trigrams","num":{$sum:1}}},
  {$sort:{"num":-1}},
  {$project: {trigram: "$_id", count: "$num"}},
  {$out:"new_collection"}
])

此外,我不确定您在将文档插入集合之前对其进行排序的目的是什么。如果排序只是为了在您决定将数据添加到集合之前查看数据,您可能需要考虑删除该步骤。

关于mongodb - $group 需要一个 _id 数组,但 $out 不会处理它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483474/

相关文章:

java - 如何检查MongoDB对象是否存在并分别创建/更新?

node.js - 如何使用 Waterline Adapter for Mongo 在 Sails.js 中使用搜索修饰符 "OR"

javascript - $mergeObjects 阶段的 MongoDB 3.2 等价物

mongodb 在巨大的数据集上聚合

mongodb - 如何在 MongoDB 中创建(双)链表结构?

c# - 如何使用c#中的mongo驱动程序按条件排序

Mongodb聚合查找在每个数组中添加有条件的字段

python - PyMongo 按多个键分组

.Net core字典中的Mongodb $inc运算符

javascript - 从值数组中计算不同的 MongoDb