这是我之前关于为副本集设置不同数据的问题的后续内容, 我发现你可以为每个副本指定一个集合来读取,并且你可以实际模拟oplog.rs。
由于这些文件的信息不同,副本最终不会出现错误消息,指出它不同步。
然而,我现在唯一的大问题是,当您向集合添加数据时,_id字段自动生成。
我有没有办法绕过这个_id代,只是将信息添加到集合中?如果没有,那么已经显示在正在添加的文档中的_id字段是否被视为文档_id?
感谢您的贡献, 贡萨洛
PS:再次,这是java / jsp项目的一部分,如果该领域的任何人都可以协助执行此功能,请执行此操作!
答案 0 :(得分:3)
没关系,在官方论坛上找到答案, 为了进一步参考,我将留下我从那里得到的最终答案。
为了能够在没有“_id”字段的情况下将文档添加到集合中,首先我们需要创建一个Capped Collection,这个Capped Collection(据说,根据文档,这些集合也需要设置最大大小) )默认情况下,在没有“_id”字段的情况下添加文档,但在某些情况下,它们可能会添加“_id”字段,在这种情况下我们将“autoIndexId”指定为false,这(假设)会覆盖任何默认值并设置集合不将“_id”字段设置为索引,以后我们可以删除它。
所以,回顾一下,步骤1:
我们创建了一个封顶集合:
db.createCollection("cappedcoll", {capped:true, size:100000});
如果它不生成。为什么,你很幸运!恭喜!
如果确实产生了。第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”设置为不是集合的索引...
这也意味着你和我在同一个阶段 祝你好运,我希望他们能尽快解决这个问题,或者有人在这里补充这篇文章并纠正我说错的任何内容。