我有一个应用程序通过查询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游标读取oplog .$natural
该tailable光标教程进入上使用的一些更详细的,但是要注意的几个特定的点是:
- Tailable游标不使用索引并按自然顺序返回文档.
- 由于tailable游标不使用索引,因此查询的初始扫描可能很昂贵; 但是,在最初耗尽光标之后,新添加的文档的后续检索是便宜的
| 归档时间: |
|
| 查看次数: |
2581 次 |
| 最近记录: |