Java MongoDB:插入具有特定id而不是自动生成的ObjectID的文档
我需要使用java在MongoDB上插入文档(使用特定id而不是自动生成的ObjectID)Java MongoDB:插入具有特定id而不是自动生成的ObjectID的文档,java,mongodb,Java,Mongodb,我需要使用java在MongoDB上插入文档(使用特定id而不是自动生成的ObjectID) 要插入一个文档或更新(如果存在),我尝试使用findOne搜索id,如果id不存在,则insertid,然后findanddomify。这很有效,但我觉得这不是一种有效的方法,它很耗时。有没有更好的方法来实现这一点 为了一次插入多个文档,我遵循以下步骤。但我不知道如何插入自定义Id而不是objectID 对于MongoDB遇到的第一个问题,我们将不胜感激 或者在 如果要设置自定义ID,只需手动设置\u
findOne
搜索id,如果id不存在,则insert
id,然后findanddomify
。这很有效,但我觉得这不是一种有效的方法,它很耗时。有没有更好的方法来实现这一点对于MongoDB遇到的第一个问题,我们将不胜感激 或者在 如果要设置自定义ID,只需手动设置
\u ID
键即可
yourBasicDBObject.put("_id",yourCustomId)
您只需确保它对于每个文档都是唯一的
您还需要在modifiedObject
中设置\u id
,否则将生成一个新id
至于批量操作,只需通过给\u ID
键为每个文档设置一个自定义ID也应该有效。试试这个@ebt\u dev:
db.collection("collectionname").insertOne(data, { forceServerObjectId: false })
对。但这真的与被指出已经采取的
.findAndModify()
方法没有区别吗?如果我错了,请原谅,但问题似乎是问“如何批量分配自定义id值。因此,Upserts是一样的,显然,“多”更新不会因为分配自定义id而将其删除。@NeilLunn我理解第一部分与单个文档相关,因为它使用findOne()
若要查看_id是否存在,请插入仅包含\u id
的id,如果不存在,然后。查找并修改
内容。uspert
是一个非常简单的一步操作。问题2仅与插入相关,因此每个文档部分的\u id
设置应该是解决方案。指定你似乎又误解了这里的批评。OP指出的问题是分配给\u id
的“值”是什么。例如,“多”更新只会分配默认的ObjectId
值。但当然,只需“循环”插入并获取自己的id值,然后联系服务器并进行更新等等“没有效率”,这是OP所说的。因此,问题实际上是问“什么是效率?”IMHO,虽然可能没有用最好的方式表达。Ce la vie。@NeilLunn Yep这个问题不是很清楚,我理解它的方式有两个问题:1.以“插入一个文档或更新(如果存在)”开始“并要求为单个文档提供更好的方法,因此,请向上插入单个文档2。问一个不同的问题。给出了方法(大容量插入或插入),但问题是如何分配一个_id。如果为每个文档指定了\u id
键(从来没有真正需要的大容量插入或插入)?@Trudbert我不理解你的sec解决方案,那么大容量插入(如op链接的解决方案)不应该实现这一点吗。问题如何为多个文档设置自定义id!!谢谢。这对我帮助很大{forceServerObjectId:false}
yourBasicDBObject.put("_id",yourCustomId)
db.collection("collectionname").insertOne(data, { forceServerObjectId: false })