首页 > 解决方案 > mongodb区分数组中映射的键,它是文档的属性

问题描述

我使用 mongodb,一种文档格式是这样的:

{
    sid:2,
    attr:[
        {
            key:"name",
            value:"bike"
        },{
            key:"weight",
            value:"100"
        }
    ]
}

有一个属性“attr”,它就像一个具有不确定数量的键的映射。整个系列看起来像这样:

[{
    sid:1,
    attr:[
        {
            key:"name",
            value:"bike"
        }
    ]
},{
    sid:2,
    attr:[
        {
            key:"name",
            value:"bike"
        },{
            key:"weight",
            value:"100"
        }
    ]
},{
    sid:3,
    attr:[
        {
            key:"color",
            value:"red"
        },{
            key:"weight",
            value:"100"
        }
    ]
}]

现在,我想知道有多少个不同的键,它们是什么。在这个例子中,我期望的不同键应该是:

["name","weight","color"]

但是更多的文档插入到集合中呢?这个集合中的数据是不固定的

标签: mongodbdistinct

解决方案


您首先需要$unwind数组attr,然后您可以使用$group聚合来区分字段。

db.collection.aggregate([
  { "$unwind": "$attr" },
  { "$group": { "_id": "$attr.key" } }
])

推荐阅读