db.collection.count () devuelve muchos más documentos para la colección fragmentada en MongoDB

Tengo 2 fragmentos con conjuntos de replicación (3 instancias cada uno). Cuando lo hagocount() en una colección fragmentada, obtengo mucho más que el número real de documentos (más de 2.5 millones de documentos de diferencia). Lo mismo cuando acabo de hacerfind() e incrementando el contador enforEach() lazo.

¿Cómo sé el número real de documentos? En primer lugar, conozco la tendencia de aumento, es decir, no puede aumentar tan radicalmente. En segundo lugar, cuando cuento los documentos con la siguiente secuencia de comandos M / R, obtengo un número real de documentos (como supongo). Utilizo este script para ver documentos duplicados. Número de duplicados es varios miles no millones. Y la cuenta detest_duplicate_collection Menos duplicados me da un 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 );

Ahora, entiendo que durante el balanceo puede suceder que algunos trozos no se eliminen aún mientras se transfieren a otro fragmento. Pero veo en el estado (sh.status()) que todos los trozos están igualmente distribuidos. También he intentado pausar las operaciones de escritura para ver si lleva algún tiempo, pero no sucedió nada.

Se podría decir que la eliminación de los fragmentos movidos todavía está en curso, y de hecho, cuando comencé a usar la fragmentación, observé ligeras disminuciones (sin operaciones de escritura) para la recolección de fragmentos. Pero en la actualidad, no hay cambios en el tiempo, simplemente se detiene. Traté también de usarorphanage.js con la esperanza de encontrar documentos huérfanos (utilizando el guión dehttps://groups.google.com/forum/#!topic/mongodb-user/OKH5_KDO04I) pero no se han encontrado tales documentos.

Mi pregunta es cuál puede ser la razón por la quecount() yfind().forEach() dar más que el número real de documentos (es decir, vs script M / R).

Aprecio tu ayuda.

EDITAR1

Hubo un problema con la configuración del conjunto de replicación en uno de los fragmentos. Específicamente, no se ha configurado ningún maestro en el archivo de configuración. En el panel de MMS en lugar dePrimary Siempre viSlave para el host que fue escuchado por otros hosts de replicación. Cuando lo arreglamos,forEach el conteo de bucles comenzó a mostrar el mismo número de documentos que en el script M / R anterior. Así que el único problema actualmente es con elcount() sí mismo.

En MongoDB JIRA encontré el siguiente error sin resolver con count () en un entorno fragmentadohttps://jira.mongodb.org/browse/SERVER-3645 Pero realmente se relaciona con count () durante el balanceo, es decir, el conteo puede contar los fragmentos que se mueven actualmente por el balanceador. Como solución temporal, este error propone poner una consulta que siempre es verdadera. Lo intenté también pero aún así vuelve igual que antes.

Respuestas a la pregunta(1)

Su respuesta a la pregunta