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

我需要使用java在MongoDB上插入文档(使用特定id而不是自动生成的ObjectID)

  • 要插入一个文档或更新(如果存在),我尝试使用
    findOne
    搜索id,如果id不存在,则
    insert
    id,然后
    findanddomify
    。这很有效,但我觉得这不是一种有效的方法,它很耗时。有没有更好的方法来实现这一点

  • 为了一次插入多个文档,我遵循以下步骤。但我不知道如何插入自定义Id而不是objectID


  • 对于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 })