如何使数组元素在 mongodb 中唯一

How to make array elements unique in mongodb

在我的 mongo 集合中,我有一个数组,其中所有元素都必须是唯一的。 但是错误地,我添加了重复的元素。如何使数组元素不同? 有没有query/command?

集合中的文档:

{
   Tags: ["a", "a", "a"]
}

但我想要:

{
  Tags: ["a"]
}

您可以在相关 collectiontag 属性 上创建唯一索引。

请参考以下官方指南;

https://docs.mongodb.com/manual/core/index-unique/

这看起来是一个不错的选项,可以清除 mongo shell:

中的重复项
 db.collection.aggregate([
    { "$project": {
        "Tags": { "$setUnion": [ "$Tags", [] ] },
        "same": { "$eq": [
        { "$size": "$Tags" },
        { "$size": { "$setUnion": [ "$Tags", [] ] } }
    ]}
  }},
   { "$match": { "same": false } }
 ]).forEach(function(doc) {
 db.collection.update(
    { "_id": doc._id },
    { "$set": { "Tags": doc.Tags } }
  )
 })

解释:

  1. 投影一个只有唯一值的新字段“标签”。
  2. 设计一个“相同”的新字段,它将检查并说明是否存在重复项。
  3. 只匹配有重复的文档
  4. 使用 forEach 循环遍历具有重复标签的文档以替换为唯一版本。

对于 mongo 版本 4.2+,您可以只使用 pipelined updates combined with $setUnion,像这样:

db.collection.updateMany({},
[
  {
    $set: {
      Tags: {
        $setUnion: "$Tags"
      }
    }
  }
])

Mongo Playground