mongodb在数组中区分映射的键,该键是文档的属性

时间:2018-09-13 10:24:51

标签: mongodb distinct

我使用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"]

但是将更多文档插入到集合中怎么办?此集合中的数据不固定

1 个答案:

答案 0 :(得分:0)

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

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