【问题标题】:Mongodb, get distinct values of a field and output the values as single documentMongodb,获取字段的不同值并将值输出为单个文档
【发布时间】:2021-01-08 13:06:05
【问题描述】:

我有大量具有以下结构的文档

{'_id':ObjectId(something),...., 'id':1}
{'_id':ObjectId(something),....,'id':2}
....

我想获取不同的 id(即“id”字段中的值)。下面的代码可以在一定程度上解决我的问题,

db.mycollection.aggregate([{$group: {_id: '$id'},{ "$out": "exist_indexes" }],{allowDiskUse: true});

但是,在输出集合exist_indexes 中,不同的值存储为多个文档。类似的东西

{'_id': 1}
{'_id': 2}
....

如何在输出集合中将不同的值输出为a single document?像这样的

{"_id": [1,2,3,....]}
 

【问题讨论】:

    标签: mongodb distinct-values


    【解决方案1】:

    议程是获得独特的价值,那么为什么要在输出中打扰_id。使用 MongoDB inbuild distinct 函数。

    db.mycollection.distinct("id")

    确保在执行查询之前首先创建字段 id 的索引

    【讨论】:

    • 这是一个相当大的集合。达到上限:“明显太大,16mb 上限”
    • 请创建id字段的索引,然后尝试。
    【解决方案2】:

    您可以在$group 中使用$addToSet

    db.mycollection.aggregate([
      {
        $group: {
          _id: null,
          ids: { $addToSet: "$id" } // change field name ids to as you want
        }
      },
      { $project: { _id: "$ids" } }, // you can skip this if you don't want to change field name
      { $out: "exist_indexes" }
    ])
    

    Playground

    【讨论】:

    • 谢谢!我从来不知道我可以将“null”设置为_id。我的收藏相当大。我遇到了这个问题“BufBuilder 试图将()增长到 67108871 字节,超过 64MB 限制。”。你知道如何处理这个限制吗?谢谢!
    • 看看这个question 和答案。您可以将其分散在多个文档中,而不是一个。
    • 谢谢。我实际上厌倦了您提供的链接中的答案。使用“$out”没有帮助。通过“将它分布在多个文档中而不是一个”,您的意思是我可以控制要在“exist_indexes”中生成的文档数量(例如,将结果存储在 2 个或 3 个文档中)?我该怎么做?
    • 是的,单个文档中只存储id有什么用,有什么用?
    • 感谢您的建议!也许我会使用一些过滤器将任务分解成更小的任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多