0

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

由于这些文件的信息不同,因此副本最终不会收到一条错误消息指出它不同步。

但是,我目前唯一遇到的大问题是当您将数据添加到集合时会自动生成 _id 字段。

有没有办法让我绕过这个 _id 生成并将信息添加到集合中?如果不是,是否将已显示在要添加的文档中的 _id 字段视为文档 _id?

我感谢你的贡献,贡萨洛

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

4

1 回答 1

3

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


注意:根据 mongoDB 开发人员的说法,这个答案应该是有效的,但是,我无法让它正常工作,请自行决定使用,如果发生错误,那么,加入错误报告的乐趣!

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

所以,回顾一下,第 1 步:
我们创建了一个 Capped Collection:

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

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

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

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

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

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

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

于 2011-07-28T08:27:35.610 回答