我希望我的用户在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>}}
)

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

Mongodb相关问答推荐

在单个mongo文档中组合数组与聚合

用Spring Boot查询MongoDB中的对象数组

MongoDB即使在使用索引时也很慢

MongoDB聚合:如何将查找结果放入嵌套数组中?

在 MongoDB 中加入多个集合

MongoDb 聚合未正确分组

MongoDB 存储大量指标/分析数据的方法

mongoose默认值等于其他值

如何在 mongodb 中设置整数的默认值?

具有最佳插入/秒性能的数据库?

使用模拟 MongoDB 服务器进行单元测试

Mongo:统计一组文档中单词出现的次数

如何使用 -number 后缀对字符串进行 MongoDB 查询排序?

为 php 5.6 (XAMPP) 添加 mongodb 扩展

如何使用 mongodb 和 php 正确处理分页查询?

如何返回 MongoDB 中文档的 ObjectId 或 _id?和错误$in 需要一个数组

Mongoose / MongoDB 用户通知方案建议

在 MongoDB 中插入或更新许多文档

PyMongo 创建具有 2 个或更多字段的唯一索引

MongoMapper 和迁移