鍍金池/ 問答/iOS  數據庫/ 關于 mongodb 索引的奇怪問題 實際寫入的數據索引沒有完成所以查詢不到?

關于 mongodb 索引的奇怪問題 實際寫入的數據索引沒有完成所以查詢不到?

比如腳本在不停的寫數據(數據的層級很深),tail -f 日志可以看到已經寫入到 10000 條了,在 mongodb 里面也可以 find 這條數據,但是直接 count 卻只有 9800 條數據,并且一直落后 200 條,與這條數據相關的大概 9 條索引(不要問我為什么這么多索引,我也不想的,我也決定不了) 索引的屬性 background 為 true 是否可以認為當用索引的時候,如果這條數據索引沒有建立完畢就查詢不到?

回答
編輯回答
壞脾滊

需要看一下執(zhí)行計劃:

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

從中可以了解到count時是否可以用到索引,用到哪條索引。
{background: true}的索引只是在初次創(chuàng)建時不阻塞前臺線程,并不是指異步創(chuàng)建索引,所以不存在你說的問題。
可能性較大的是這9條索引中有一個或多個是部分索引,而執(zhí)行計劃選中的是這個索引。可以查看索引配置:

db.<表>.getIndexes();

通常MongoDB不太可能選擇這樣的索引來count,所以也可能是特定版本的bug,希望看到你的服務端版本來確認:

db.serverBuildVersion();

綜上,我們需要看到:

  • 執(zhí)行計劃
  • 9條索引的配置
  • MongoDB版本
2017年4月22日 02:31