鍍金池/ 問答/iOS  數(shù)據(jù)庫/ 關(guān)于 mongodb 索引的奇怪問題 實(shí)際寫入的數(shù)據(jù)索引沒有完成所以查詢不到?

關(guān)于 mongodb 索引的奇怪問題 實(shí)際寫入的數(shù)據(jù)索引沒有完成所以查詢不到?

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

回答
編輯回答
壞脾滊

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

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

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

db.<表>.getIndexes();

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

db.serverBuildVersion();

綜上,我們需要看到:

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