【问题标题】:ignore duplicated string values while concatinating them in mongodb在mongodb中连接它们时忽略重复的字符串值
【发布时间】:2022-01-12 22:45:51
【问题描述】:

我设法将我的 mongodb 集合中的字符串值连接成一个结果,但我无法忽略重复的字符串 这是我尝试的一个例子: https://mongoplayground.net/p/T1TmxpGy6nV

【问题讨论】:

  • 您可以使用 $addToSet 来抑制重复项,然后将数组项连接成一个字符串。
  • 链接已损坏 - 此游乐场不存在错误。
  • 链接末尾有一个 _,游乐场运行良好
  • @barrypicker 我更新了它
  • 如果你想要不同的 cmets,我认为你需要 this,如果你想要 cmets 中不同的单词,你必须拆分评论。

标签: mongodb mongodb-query aggregation-framework mean-stack


【解决方案1】:

您的 mongoplayground 示例使用 $push。 $push 不会抑制重复,而 $addToSet 会。这是您可能会考虑的 agg...

(我冒昧地删除了空值,并冒昧地用逗号分隔结果。没有指定值的排序顺序,因此它们以无序的条件添加。)

聚合示例

db.collection.aggregate([
    {
        $match: { "comment": { $ne: null } }
    },
    {
        $group:
        {
            _id: null,
            comments: { $addToSet: "$comment" }
        }
    },
    {
        $addFields:
        {
            "comments":
            {
                $reduce:
                {
                    input: "$comments",
                    initialValue: "",
                    in:
                    {
                        "$cond":
                        {
                            if:
                            {
                                "$eq":
                                [
                                    {
                                        "$indexOfArray": [ "$comments", "$$this" ]
                                    },
                                    0
                                ]
                            },
                            then:
                            {
                                "$concat": [ "$$value", "$$this" ]
                            },
                            else:
                            {
                                "$concat": [ "$$value", ", ", "$$this" ]
                            }
                        }
                    }
                }
            }
        }
    }
])

结果

[
  {
    _id: null,
    comments: 'waiting for pieces, waiting for approval, nothing'
  }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多