为了账号安全,请及时绑定邮箱和手机立即绑定

关于 mongodb 索引的奇怪问题 实际写入的数据索引没有完成所以查询不到?

关于 mongodb 索引的奇怪问题 实际写入的数据索引没有完成所以查询不到?

临摹微笑 2018-09-03 07:56:02
比如脚本在不停的写数据(数据的层级很深),tail -f 日志可以看到已经写入到 10000 条了,在 mongodb 里面也可以 find 这条数据,但是直接 count 却只有 9800 条数据,并且一直落后 200 条,与这条数据相关的大概 9 条索引(不要问我为什么这么多索引,我也不想的,我也决定不了) 索引的属性 background 为 true 是否可以认为当用索引的时候,如果这条数据索引没有建立完毕就查询不到?
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

需要看一下执行计划:

db.<表>.explain(true).count(<条件>);

从中可以了解到count时是否可以用到索引,用到哪条索引。
{background: true}的索引只是在初次创建时不阻塞前台线程,并不是指异步创建索引,所以不存在你说的问题。
可能性较大的是这9条索引中有一个或多个是部分索引,而执行计划选中的是这个索引。可以查看索引配置:

db.<表>.getIndexes();

通常MongoDB不太可能选择这样的索引来count,所以也可能是特定版本的bug,希望看到你的服务端版本来确认:

db.serverBuildVersion();

综上,我们需要看到:

  • 执行计划

  • 9条索引的配置

  • MongoDB版本


查看完整回答
反对 回复 2018-09-03
  • 1 回答
  • 0 关注
  • 1296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信