如何在mongoDB的文档数组字段中唯一的项目

edqdpe6u  于 2022-12-29  发布在  Go
关注(0)|答案(1)|浏览(110)

我希望我的用户在MongoDB中有一个唯一的地址名。

user: {
   name: ...,
   addresses: [
   {name: "address1",...},
   {name: "address2",...}
    ]
}

如果用户添加重复的地址名称,则会收到错误。

weylhg0b

weylhg0b1#

在这种情况下,不能使用MongoDB索引,因为唯一约束索引用于不同的文档,而不是每个文档中的数组。
您可以使用一个技巧来阻止您的DB,在用户文档中添加多个与地址相同的名称:

db.users.updateOne({"user_identifier": <user_identifier>
                    "addresses": {
                           "$not": {
                              "$elemMatch": {
                                 "name": <new_address_name>
                              }
                           }
                    },
                   {"$push": {"addresses": <new_address>}}
)

在第一步中,此查询找到了与您的标识符匹配但没有新地址名称的用户。因此,如果您的用户具有使用新名称的地址,则您的查询不会与任何用户匹配,也不会更新任何用户。

相关问题