gpt4 book ai didi

MongoDb:$inc 具有唯一索引的多个文档

转载 作者:可可西里 更新时间:2023-11-01 09:34:53 24 4
gpt4 key购买 nike

我有以下代码:

db.foo.insert([{_pos:1,b:12},{_pos:2,a:23},{_pos:3,c:12}])
db.foo.createIndex( { "_pos" : 1 }, { unique: true } )
db.foo.update({}, { "$inc" : {"_pos" : 1} }, { multi : true })

最后一行给出了以下错误:

E11000 duplicate key error index: JsonTableTemp.foo.$_pos_1 dup key: { : 2.0 }

$isolated 添加到查询中没有帮助。

如何在不先删除索引的情况下增加 _pos 字段?

我用的是mongodb 3.2.6

最佳答案

好的,我知道了......

由于您要使索引唯一 - 值永远不能共享相同的值。值为 [1,2,3]。 increment是 MongoDB 的原子操作,因此它们一次发生一个...首先是 [2,2,3],然后是 [2,3,3],最后是 [2,3,4]。

要证明这一点...只需将值反转为 [3,2,1] 即可开始。

> db.foo5.insert([{_pos:3,b:12},{_pos:2,a:23},{_pos:1,c:12}])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.foo5.createIndex( { "_pos" : 1 }, { unique: true } )
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.foo5.find()
{ "_id" : ObjectId("57a9f76cb28f053d25a821a5"), "_pos" : 3, "b" : 12 }
{ "_id" : ObjectId("57a9f76cb28f053d25a821a6"), "_pos" : 2, "a" : 23 }
{ "_id" : ObjectId("57a9f76cb28f053d25a821a7"), "_pos" : 1, "c" : 12 }
> db.foo5.update({}, { "$inc" : {"_pos" : 1} }, { multi : true })
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.foo5.find()
{ "_id" : ObjectId("57a9f76cb28f053d25a821a5"), "_pos" : 4, "b" : 12 }
{ "_id" : ObjectId("57a9f76cb28f053d25a821a6"), "_pos" : 3, "a" : 23 }
{ "_id" : ObjectId("57a9f76cb28f053d25a821a7"), "_pos" : 2, "c" : 12 }

关于MongoDb:$inc 具有唯一索引的多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38854233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com