1

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

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

4

1 回答 1

0

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

db.collection.aggregate([
  { "$unwind": "$attr" },
  { "$group": { "_id": "$attr.key" } }
])
于 2018-09-13T10:40:18.877 回答