首页 > 解决方案 > 当不同的太大时,在数组中获取不同的值,16mb 上限

问题描述

我在产品集合中有以下文件:

{
   "_id": "1",
   "labels": ["item-1", "item-2"]
},
{
   "_id": "2",
   "labels": ["item-1", "item-4"]
}

我正在尝试获取每个文档的“标签”数组中所有不同值的列表:

item-1
item-2
item-4

"errmsg" : "distinct too big, 16mb cap"运行 distinct 命令时出现错误:

db.products.distinct("labels")

我尝试运行一个聚合函数,但我得到了标签的组合,而不是不同标签的列表。如何使 $group 返回单个标签的不同列表,而不是标签的不同组合?

[
  {
     $group: {
        _id : "$labels"
     }
  }
]

标签: mongodbmongodb-query

解决方案


您可以使用 unwind 和 group

db.collection.aggregate([
  { "$unwind": "$labels" },
  {
    "$group": {
      "_id": null,
      "labels": { "$addToSet": "$labels" }
    }
  }
])

工作Mongo游乐场


推荐阅读