oplog.rs中ts字段的索引未更新

Jon*_*röm 3 mongodb

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

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

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

谢谢

Ste*_*nie 7

正如您所发现的那样,系统集合不支持二级索引,例如local.oplog.rs*.system.profile.在MongoDB 2.4及更早版本中,索引似乎已经创建,但从未实际更新过.如果您尝试使用不支持的更改(例如尝试创建其他索引)直接更新系统集合,则较新版本的MongoDB(2.6+)会返回错误.

oplog.rs集合绝对是"特殊的",因为它的预期用途仅用于复制.复制内部在此基础上对oplog的预期操作做出一些假设.例如,复制只需要插入oplog条目 - 与您自己创建的上限集合不同,oplog条目永远不会更新.

如果需要跟随插入到oplog中的新条目,或者使用命令执行查找,应用程序应使用tailable游标读取oplog .$natural

tailable光标教程进入上使用的一些更详细的,但是要注意的几个特定的点是:

  • Tailable游标不使用索引并按自然顺序返回文档.
  • 由于tailable游标不使用索引,因此查询的初始扫描可能很昂贵; 但是,在最初耗尽光标之后,新添加的文档的后续检索是便宜的