使用Java在mongodb中结合大容量插入和保存?我们有没有办法实现这一目标?
我非常确定INSERT在mongodb中的工作原理,但我希望INSERT插入数据,如果Id已经存在,我希望像在mongodb中保存一样更新数据 例如: 如果我在测试集合中的条目如下所示使用Java在mongodb中结合大容量插入和保存?我们有没有办法实现这一目标?,java,mongodb,save,bulkinsert,on-duplicate-key,Java,Mongodb,Save,Bulkinsert,On Duplicate Key,我非常确定INSERT在mongodb中的工作原理,但我希望INSERT插入数据,如果Id已经存在,我希望像在mongodb中保存一样更新数据 例如: 如果我在测试集合中的条目如下所示 { "_id":ObjectId("68768242ge"), "name":"1" } 我知道使用save可以将当前数据更新为 db.test.save({ "_id":ObjectId("68768242ge"), "name":"2" }) 但是列表更新只能使用INSERT查询 db.test.
{ "_id":ObjectId("68768242ge"), "name":"1" }
我知道使用save可以将当前数据更新为
db.test.save({ "_id":ObjectId("68768242ge"), "name":"2" })
但是列表更新只能使用INSERT查询
db.test.insert({ "_id":ObjectId("68768242ge"), "name":"2" })
在这种情况下,我将得到一个错误作为重复密钥
所以我想做这两个操作,如果对象不在那里,那么我想插入它,但是如果对象键已经存在,那么我想更新它
我们有什么办法可以做到这一点吗?我想使用mongodb执行大容量插入/更新。您想执行的操作称为“upsert” 一些更新也会创建记录。如果更新操作指定 upsert标志,并且没有与的查询部分匹配的文档 更新操作,然后MongoDB将更新转换为 插入
您可以查看的MongoDB文档。没有您想要的大容量保存操作。感谢WiredPairie的回复。那么,在mongodbChanges中实现2.6中的批量操作的最佳方法是什么呢?但这还不可用:感谢lucho的回复,我知道upsert,我检查了插入、更新和保存这三个方面的性能。在INSERT中,我尝试使用批量插入选项,但在update中,我尝试使用UPSERT循环列表并使用循环保存。它清楚地表明,与更新相比,批量插入操作的性能是巨大的,但保存时的性能最差。所以我需要的是“我想插入数据,如果Id已经存在,那么它必须被更新”。如果批量插入中已经存在任何密钥,那么是否有任何方法可以使用更新进行插入。
> db.test.update({"_id" : ObjectId("529f4ddd6487ccbe70e44c75")},{"name":"orig"},{upsert: true})
> db.test.find(); { "_id" : ObjectId("529f502aef047d0c12c305d5"), "name" : "orig" }
> db.test.update({"_id" : ObjectId("529f502aef047d0c12c305d5")},{"name":"new"},{upsert: true});
> db.test.find(); { "_id" : ObjectId("529f502aef047d0c12c305d5"), "name" : "new" }