是否可以为嵌入文档中的密钥设置唯一密钥?

我有一个用户集合,其中包含以下示例文档:

 {
       Name: "Bob",
       Items: [
           {
               Name: "Milk"
           },
           {
               Name: "Bread"
           }
       ]
    },
    {
       Name: "Jim"
    },

有没有办法在属性项上创建索引.名称

当我试图创建索引时,出现以下错误:

> db.Users.ensureIndex({"Items.Name": 1}, {unique:true});
E11000 duplicate key error index: GroceryGuruApp.Users.$Items.Name_1  dup key: {
 : null }

有什么建议吗?非常感谢.

推荐答案

唯一索引只存在于整个集合中.要在文档中强制执行唯一性和其他约束,必须在客户机代码中执行.(大概virtual collections人会同意,你可以投赞成票.)

在本例中,您试图做的是在键Items.Name上创建索引,该索引在任何文档中都不存在(它不引用数组Items中的嵌入文档),因此它是null,并且违反了整个集合的唯一约束.

Mongodb相关问答推荐

会话的Mongo-go驱动程序版本.Copy()

在MongoDB查询中添加来自另一个集合的匹配文档的计数

MongoDB通过查找具有多个数组的对象进行聚合

try 从数据库创建、获取数据时失败(pymongo、MongoDB、docker-compose)

数组中字符串的Mongo查询集合和推送到新数组嵌套对象

在MongoDB Aggregate for My BooksDB中将`$match`放在`$unwin`之前或之后的区别

在mongo聚合管道的组阶段排除字段,但在最后将其包含在内

根据参考图计算子文档列表的最大值

MongoDB 根据最新日期查询多个不同的值

Mongo聚合的具体格式

MongoDB 按日期时间字段查询 1h 间隔

如何获取mongodb ObjectId的值?

mongodb中集合的最大大小是多少

什么 Javascript 库可以针对对象判断类似 MongoDB 的查询谓词?

从 mongodb 中的副本配置重新开始

MongoDB 3 Java判断集合是否存在

NoSQL:MongoDB 或 BigTable 并不总是 Available意味着什么

MongoDb 数据库与集合

MongoDB 连接字符串到副本集

停止副本集 MongoDB