我希望我的用户在MongoDB中有一个唯一的地址名称.
user: {
name: ...,
addresses: [
{name: "address1",...},
{name: "address2",...}
]
}
如果用户添加了重复的地址名称,他会收到一个错误.
我希望我的用户在MongoDB中有一个唯一的地址名称.
user: {
name: ...,
addresses: [
{name: "address1",...},
{name: "address2",...}
]
}
如果用户添加了重复的地址名称,他会收到一个错误.
在此场景中,您不能使用MongoDB索引,因为唯一约束索引用于不同的文档,而不是用于每个文档中的array.
您可以使用一个技巧来阻止您的数据库,即在用户文档中添加多个与地址相同的名称:
db.users.updateOne({"user_identifier": <user_identifier>
"addresses": {
"$not": {
"$elemMatch": {
"name": <new_address_name>
}
}
},
{"$push": {"addresses": <new_address>}}
)
在第一步中,该查询找到了一个与您的标识符匹配并且没有新地址名称的用户.因此,如果您的用户有一个新名称的地址,则您的查询不会与任何用户匹配,并且不会更新任何用户.