我希望我的用户在MongoDB中有一个唯一的地址名。
user: { name: ..., addresses: [ {name: "address1",...}, {name: "address2",...} ] }
如果用户添加重复的地址名称,则会收到错误。
weylhg0b1#
在这种情况下,不能使用MongoDB索引,因为唯一约束索引用于不同的文档,而不是每个文档中的数组。您可以使用一个技巧来阻止您的DB,在用户文档中添加多个与地址相同的名称:
db.users.updateOne({"user_identifier": <user_identifier> "addresses": { "$not": { "$elemMatch": { "name": <new_address_name> } } }, {"$push": {"addresses": <new_address>}} )
在第一步中,此查询找到了与您的标识符匹配但没有新地址名称的用户。因此,如果您的用户具有使用新名称的地址,则您的查询不会与任何用户匹配,也不会更新任何用户。
1条答案
按热度按时间weylhg0b1#
在这种情况下,不能使用MongoDB索引,因为唯一约束索引用于不同的文档,而不是每个文档中的数组。
您可以使用一个技巧来阻止您的DB,在用户文档中添加多个与地址相同的名称:
在第一步中,此查询找到了与您的标识符匹配但没有新地址名称的用户。因此,如果您的用户具有使用新名称的地址,则您的查询不会与任何用户匹配,也不会更新任何用户。