Java mongoDB将数据添加到不带_id字段的集合中

Java mongoDB将数据添加到不带_id字段的集合中,java,jsp,mongodb,mongodb-java,Java,Jsp,Mongodb,Mongodb Java,这是我之前关于为副本集设置不同数据的问题的后续内容, 我发现您可以为每个副本指定一个要读取的集合,并且您可以实际模拟oplog.rs 由于这些文件的信息不同,因此复制副本不会出现错误消息,表明其不同步 然而,我现在遇到的唯一大问题是,在向集合添加数据时,会自动生成_id字段 有没有一种方法可以让我绕过这个生成id的过程,直接将信息添加到集合中?如果没有,是否将已显示在正在添加的文档中的_id字段视为文档_id 我感谢你的贡献, 贡萨洛 PS:再一次,这是java/jsp项目的一部分,如果该领域的

这是我之前关于为副本集设置不同数据的问题的后续内容, 我发现您可以为每个副本指定一个要读取的集合,并且您可以实际模拟oplog.rs

由于这些文件的信息不同,因此复制副本不会出现错误消息,表明其不同步

然而,我现在遇到的唯一大问题是,在向集合添加数据时,会自动生成_id字段

有没有一种方法可以让我绕过这个生成id的过程,直接将信息添加到集合中?如果没有,是否将已显示在正在添加的文档中的_id字段视为文档_id

我感谢你的贡献, 贡萨洛


PS:再一次,这是java/jsp项目的一部分,如果该领域的任何人都可以帮助实现这一点,请这样做

Nevermind,在官方论坛上找到了答案, 为了进一步的参考,我将留下我从那里得到的最终答案


注意:根据mongoDB开发人员的说法,这个答案应该是有效的,但是,我无法让它正常工作,请自行决定使用,如果发生错误,那么,加入bug报告吧! 为了能够将文档添加到没有“_id”字段的集合中,首先我们需要创建一个Capped集合,这个Capped集合(根据文档,这些集合也需要设置最大大小)默认情况下在没有“_id”字段的情况下添加文档,但是在某些情况下,它们可能会得到无论如何添加了“\u id”字段,在本例中,我们将“autoIndexId”指定为false,这(假定)会覆盖任何默认值,并将集合设置为不将“\u id”字段设置为索引,允许我们稍后删除它

因此,概括一下,步骤1:
我们创建了一个封顶集合:

db.createCollection(“cappedcoll”,{capped:true,size:100000});

第二步:
测试集合以检查它是否确实生成了一个“_id”字段

如果它不产生。为什么,你很幸运!恭喜! 如果确实生成。步骤3:
我们创建了一个封顶集合,其中autoIndexId字段设置为false:

db.createCollection(“cappedcoll”,{capped:true,size:100000,autoIndexId:false});

第四步:
我们向集合中添加一个项,然后通过更新删除“\u id”字段:

db.cappedcoll.insert({“name”:{“First”:“Gonza”,“Last”:“Vieira”});
db.cappedcoll.update({“names.First”:“Gonza”},{$unset:{“\u id”:1}}});

如果您访问此部分,那么它要么起作用,要么您收到一条令人讨厌的
“无法修改”\u id“
错误消息,该消息不应显示,因为我们将“\u id”设置为不是集合的索引

这也意味着你和我正处在同一个阶段。

祝你好运,我希望他们尽快解决这个问题,或者这里有人补充这篇文章,纠正我说的任何错误。

没关系,在官方论坛上找到了答案, 为了进一步的参考,我将留下我从那里得到的最终答案


注意:根据mongoDB开发人员的说法,这个答案应该是有效的,但是,我无法让它正常工作,请自行决定使用,如果发生错误,那么,加入bug报告吧! 为了能够将文档添加到没有“_id”字段的集合中,首先我们需要创建一个Capped集合,这个Capped集合(据文档所述,这些集合也需要设置最大大小)默认情况下在没有“_id”字段的情况下添加文档,但是在某些情况下,它们可能会得到_无论如何添加了id“字段,在本例中,我们将“autoIndexId”指定为false,这(假定)将覆盖所有默认值,并将集合设置为不将“_id”字段设置为索引,允许我们稍后删除它

因此,概括一下,步骤1:
我们创建了一个封顶集合:

db.createCollection(“cappedcoll”,{capped:true,size:100000});

第二步:
测试集合以检查它是否确实生成了一个“_id”字段

如果它不产生。为什么,你很幸运!恭喜! 如果确实生成。步骤3:
我们创建了一个封顶集合,其中autoIndexId字段设置为false:

db.createCollection(“cappedcoll”,{capped:true,size:100000,autoIndexId:false});

第四步:
我们向集合中添加一个项,然后通过更新删除“\u id”字段:

db.cappedcoll.insert({“name”:{“First”:“Gonza”,“Last”:“Vieira”});
db.cappedcoll.update({“names.First”:“Gonza”},{$unset:{“\u id”:1}}});

如果您访问此部分,那么它要么起作用,要么您收到一条令人讨厌的
“无法修改”\u id“
错误消息,该消息不应显示,因为我们将“\u id”设置为不是集合的索引

这也意味着你和我正处在同一个阶段。

祝你好运,我希望他们尽快解决这个问题,或者这里有人补充这篇文章,纠正我说的任何错误。

它仍然生成_id,不管你做什么。我在3.1版上。它仍然生成_id,不管你做什么。我在3.1版上。