我有一个应用程序,它通过查询 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/