【问题标题】:$group needs an array for _id but $out won't handle it$group 需要一个 _id 数组,但 $out 不会处理它
【发布时间】:2015-02-12 17:04:33
【问题描述】:

我需要对数组出现的次数求和。我需要将其输出到一个集合,但是当我尝试使用 $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 aggregation-framework


    【解决方案1】:

    在 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"}
    ])
    

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

    【讨论】:

    • 谢谢,只要我不投影原始_id,它就可以工作......是的,排序只是为了查看数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多