我有一个应用程序,它通过查询 ts 字段来读取 mongodb 2.2 副本集中的 oplog.rs 集合。

我在 ts 字段上添加了一个索引,但是当新条目插入 oplog 时它不会更新。

我错过了什么?我在 mongodb 文档中找不到任何关于不支持上限集合的索引的内容(相反),并且我找不到任何关于 oplog 特殊的信息。

谢谢

最佳答案

正如您所发现的,系统集合不支持二级索引,例如 local.oplog.rs*.system.profile 。在 MongoDB 2.4 及更早版本中,索引似乎已创建,但实际上从未更新。如果您尝试使用不受支持的更改(例如尝试创建其他索引)直接更新系统集合,则较新版本的 MongoDB (2.6+) 会返回错误。
oplog.rs 集合绝对是“特殊的”,因为它的预期用途仅用于复制。复制内部在此基础上对 oplog 的预期操作做出一些假设。例如,复制只需要插入 oplog 条目——与您自己创建的上限集合不同,oplog 条目永远不会更新。

如果应用程序需要跟踪插入到 oplog 中的新条目,或者使用 tailable cursor 进行查找,则希望应用程序使用 $natural order 读取 oplog。

tailable cursor tutorial 更详细地介绍了用法,但需要特别注意的几点是:

关于mongodb - oplog.rs 中 ts 字段的索引未更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15389325/

10-11 00:13