mongoDB中文档的数组字段中的唯一项



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

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

如果用户添加了一个重复的地址名,他会得到一个错误。

在这种情况下,您不能使用MongoDB索引,因为唯一约束索引用于不同的文档,而不是用于每个文档中的数组。

您可以使用一个技巧来防止您的DB,在用户文档中添加多个相同的名称作为地址:

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

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

最新更新