db.collection.count () retorna muito mais documentos para a coleção sharded no MongoDB

Eu tenho 2 shards com conjuntos de replicação (3 instâncias cada). Quando eu façocount() em uma coleção fragmentada, recebo muito mais do que o número real de documentos (mais de 2,5 milhões de diferença de documentos). O mesmo quando eu façofind() e incremento contador emforEach() loop.

Como eu sei o número real de documentos? Primeiro de tudo, eu sei a tendência de aumento, ou seja, não pode aumentar de forma tão radical. Em segundo lugar, quando conto documentos com o seguinte script M / R, recebo um número real de documentos (como presumo). Eu uso esse script para ver documentos duplicados. O número de duplicatas é de vários milhares, não de milhões. E a contagem emtest_duplicate_collection menos duplicatas me dá um número real de documentos.

var map = function(){
   emit(this.doc_id, 1);
};

var reduce = function(key, values){
   var result = 0;
   values.forEach(function(value) {
     result += value;
   });

   return result;
};

db.test_collection.mapReduce(map, reduce, "test_duplicate_collection",null );

Agora, eu entendo que, durante o balanceamento, pode acontecer que alguns fragmentos não sejam excluídos ainda durante a transferência para outro fragmento. Mas vejo no status (sh.status()) que todos os pedaços são igualmente distribuídos. Eu também tentei pausar as operações de gravação para ver se leva algum tempo, mas nada aconteceu.

Você pode dizer que a exclusão de partes movidas ainda está ocorrendo e, de fato, quando comecei a usar o particionamento, vi pequenas diminuições (sem operações de gravação) para a coleção fragmentada. Mas atualmente, não há mudança ao longo do tempo, apenas fica parado. Eu também tentei usarorphanage.js com a esperança de encontrar documentos órfãos (usando o script dehttps://groups.google.com/forum/#!topic/mongodb-user/OKH5_KDO04I) mas esses documentos não foram encontrados.

Minha pergunta é qual pode ser a razão pela qualcount() efind().forEach() dar mais do que o número real de documentos (ou seja, vs script M / R).

Agradeço sua ajuda.

EDIT1

Houve um problema com a configuração do conjunto de replicação em um dos shards. Especificamente, nenhum mestre foi definido no arquivo de configuração. No painel do MMS em vez dePrimary Eu sempre viSlave para o host que foi ouvido por outros hosts de replicação. Quando consertamos isso,forEach A contagem de loop começou a mostrar o mesmo número de documentos que no script M / R acima. Então, o único problema atualmente é com ocount() em si.

No MongoDB JIRA eu encontrei o seguinte bug não resolvido com count () no ambiente shardedhttps://jira.mongodb.org/browse/SERVER-3645 Mas isso realmente se relaciona com count () durante o balanceamento, ou seja, a contagem pode contar partes que atualmente são movidas pelo balanceador. Como uma solução alternativa, este bug propõe colocar a consulta que é sempre verdadeira. Eu tentei também, mas ainda assim ele retorna como antes.

questionAnswers(1)

yourAnswerToTheQuestion