mongoDB在没有_id字段的情况下向集合添加数据

时间:2011-07-26 15:59:22

标签: java jsp mongodb mongodb-java

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

由于这些文件的信息不同,副本最终不会出现错误消息,指出它不同步。

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

我有没有办法绕过这个_id代,只是将信息添加到集合中?如果没有,那么已经显示在正在添加的文档中的_id字段是否被视为文档_id?

感谢您的贡献, 贡萨洛

PS:再次,这是java / jsp项目的一部分,如果该领域的任何人都可以协助执行此功能,请执行此操作!

1 个答案:

答案 0 :(得分:3)

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


注意:这个答案据说可以根据mongoDB开发工作,但是,我无法让它正常工作,自行决定使用,如果出现错误,那么加入bug报告就好了!

为了能够在没有“_id”字段的情况下将文档添加到集合中,首先我们需要创建一个Capped Collection,这个Capped Collection(据说,根据文档,这些集合也需要设置最大大小) )默认情况下,在没有“_id”字段的情况下添加文档,但在某些情况下,它们可能会添加“_id”字段,在这种情况下我们将“autoIndexId”指定为false,这(假设)会覆盖任何默认值并设置集合不将“_id”字段设置为索引,以后我们可以删除它。

所以,回顾一下,步骤1:
我们创建了一个封顶集合:

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

步骤2:
测试集合以检查它是否确实生成了“_id”字段。

如果它不生成。为什么,你很幸运!恭喜! 如果确实产生了。第3步:
我们创建一个Capped Collection,并将autoIndexId字段设置为false:

db.createCollection("cappedcoll", {capped:true, size:100000, autoIndexId:false});
step4:
我们在集合中添加一个项目,然后通过更新删除“_id”字段:

db.cappedcoll.insert({"names": {"First": "Gonza", "Last": "Vieira"}}); db.cappedcoll.update({"names.First": "Gonza"},{$unset: {"_id":1}});

如果你到达这个部分,那么它要么工作,要么你得到一个讨厌的"cannot modify "_id""错误消息,这不应该出现,因为我们将“_id”设置为不是集合的索引...

这也意味着你和我在同一个阶段 祝你好运,我希望他们能尽快解决这个问题,或者有人在这里补充这篇文章并纠正我说错的任何内容。