Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java在mongodb中结合大容量插入和保存?我们有没有办法实现这一目标?_Java_Mongodb_Save_Bulkinsert_On Duplicate Key - Fatal编程技术网

使用Java在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.

我非常确定INSERT在mongodb中的工作原理,但我希望INSERT插入数据,如果Id已经存在,我希望像在mongodb中保存一样更新数据

例如:

如果我在测试集合中的条目如下所示

{ "_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" }