将唯一稀疏索引添加到现有数据库

时间:2015-02-17 12:57:26

标签: mongodb indexing

我有一个数据库,现在我想为现有的集合添加一个唯一且稀疏的索引。问题是我从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命令的问题是什么?

1 个答案:

答案 0 :(得分:2)

好吧,如果2元组('ref.origin', 'user')不是唯一的,那么您会遇到一个唯一的密钥违规。在这种情况下,元组的值为{ null, ObjectId('54df4f8f93a640bd16000001') }

索引稀疏的事实将很重要only if the entire set of fields is absent,即使{ null, null }元组也不会被忽略,但确保了它们的唯一性。必须取消设置两个字段,即ref.originuser才能使其生效。