【问题标题】:How to concatenate arrays from multiple documents in MongoDB?如何在 MongoDB 中连接来自多个文档的数组?
【发布时间】:2016-08-03 00:33:33
【问题描述】:

假设我有一个名为“people”的集合,其中包含以下文档:

{
    "name": "doug",
    "colors": ["blue", "red"]
}

{
    "name": "jack",
    "colors": ["blue", "purple"]
}

{
    "name": "jenny",
    "colors": ["pink"]
}

我如何获得所有 colors 子数组的串联数组,即?

["blue", "red", "blue", "purple", "pink"]

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

    好吧,Try 应该适合你!!

    db.people.distinct("colors")
    

    【讨论】:

    • 简单高效!这个答案应该是公认的。
    • 非常好,正是我需要的;很高兴知道您可以将可选查询传递给distinct 以过滤掉结果。 source
    • 这不能回答问题。这仅返回 distinct 颜色,而接受的答案返回所有连接的数组。
    【解决方案2】:

    尝试使用聚合:

    db.people.aggregate([
      {$unwind:"$colors"},
      {$group:{_id:null, clrs: {$push : "$colors"} }},
      {$project:{_id:0, colors: "$clrs"}}
    ])
    

    结果:

    {
    "result" : [
        {
            "colors" : [
                "blue",
                "red",
                "blue",
                "purple",
                "pink"
            ]
        }
    ],
    "ok" : 1
    }
    

    更新

    如果您想在结果数组中获取唯一值,您可以在$group 阶段使用$addToSet 运算符而不是$push

    【讨论】:

    • 你好,但如果我需要结果中的唯一值,我将如何实现这一点,因为这将在这个数组中给出重复的条目
    • 当然。为此,您可以在{$group:{_id:null, clrs: {$push : "$colors"} }}, 字符串中将$push 运算符更改为$addToSet
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2015-03-09
    相关资源
    最近更新 更多