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

mongodb distinct the key of a map in an array which is a property of a document

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

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

您需要先$unwind the attr array then you can use $group聚合来区分字段。

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