2

我正在尝试在 MongoDB 中的一组字段上添加唯一索引。并非所有这些字段在所有文档中都可用,我只想索引那些具有所有字段的字段。

所以,我试图运行这个:

db.mycollection.ensureIndex({date:1, type:1, reference:1}, {sparse: true, unique: true})

但是我在缺少“类型”字段的字段上收到错误E11000 duplicate key error index(其中有很多并且它们是重复的,但我只想忽略它们)。

在 MongoDB 中是否有可能或有一些解决方法?

4

2 回答 2

3

有很多人想要这个功能,因为没有解决方法,我建议在 jira.mongodb.org 中投票支持功能请求 Jira 票证:

请注意,由于 785 将提供一种强制执行此功能的方法,因此 2193 被标记为“不会修复”,因此投票并将您的评论添加到 785 可能会更有效率。

于 2013-06-05T13:42:37.793 回答
0

唯一性,你可以保证,使用 upsert 操作而不是插入。这将确保如果某些文档已经存在,那么如果文档不存在,它将更新或插入

test:Mongo > db.test4.ensureIndex({ a : 1, b : 1, c : 1}, {sparse : 1})

test:Mongo > db.test4.update({a : 1, b : 1}, {$set : { d : 1}}, true, false)
test:Mongo > db.test4.find()
{ "_id" : ObjectId("51ae978960d5a3436edbaf7d"), "a" : 1, "b" : 1, "d" : 1 }
test:Mongo > db.test4.update({a : 1, b : 1, c : 1}, {$set : { d : 1}}, true, false)
test:Mongo > db.test4.find()
{ "_id" : ObjectId("51ae978960d5a3436edbaf7d"), "a" : 1, "b" : 1, "d" : 1 }
{ "_id" : ObjectId("51ae97b960d5a3436edbaf7e"), "a" : 1, "b" : 1, "c" : 1, "d" : 1 }
于 2013-06-05T01:46:13.547 回答