【问题标题】:mongodb distinct the key of a map in an array which is a property of a documentmongodb区分数组中映射的键,它是文档的属性
【发布时间】:2018-09-13 10:24:50
【问题描述】:

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

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

【问题讨论】:

  • 预期的输出应该是什么?
  • @AnthonyWinzlet: ["name","weight","color"]
  • @AnthonyWinzlet 非常感谢。它工作。我会学习 api 并验证它是否准确
  • 试试db.colname.distinct("attr.key")
  • 我试过了,在我的真实表中得到 57 的结果。数字更多,我需要检查@Veeram

标签: mongodb distinct


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    相关资源
    最近更新 更多