唯一性,你可以保證,使用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 –