我有一个数据库,现在我想为现有的集合添加一个唯一且稀疏的索引。问题是我从MongoDB收到此错误:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"ok" : 0,
"errmsg" : "E11000 duplicate key error index: dbname.posts.$ref.origin_1_user_1 dup key: { : null, : ObjectId('54df4f8f93a640bd16000001') }",
"code" : 11000
}
据我所知,sparse
索引用于可能包含空值的列,这就是我使用sparse
选项的原因:
db.posts.ensureIndex({ "ref.origin": 1, "user": 1 }, { unique: true, sparse: true })
我createIndex
命令的问题是什么?
答案 0 :(得分:2)
好吧,如果2元组('ref.origin', 'user')
不是唯一的,那么您会遇到一个唯一的密钥违规。在这种情况下,元组的值为{ null, ObjectId('54df4f8f93a640bd16000001') }
。
索引稀疏的事实将很重要only if the entire set of fields is absent,即使{ null, null }
元组也不会被忽略,但确保了它们的唯一性。必须取消设置两个字段,即ref.origin
和user
才能使其生效。