唯一性,你可以保证,使用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 }
稀疏手段不索引缺少您要索引的字段的文档。这对复合索引没有意义,除非您想跳过没有设置任何字段的文档。 –
@AsyaKamsky是的,我知道它是如何工作的,我正在寻找解决这个限制的解决方法。 – sashkello
已经有一个同样的问题提交的bug:https://jira.mongodb.org/browse/SERVER-2193 –