db.collection.count () возвращает намного больше документов для коллекций в ShongoDB

У меня есть 2 осколка с наборами репликации (3 экземпляра каждый). Когда я делаюcount() в закрытой коллекции я получаю намного больше, чем реальное количество документов (разница в более чем 2,5 миллиона документов). То же самое, когда я просто делаюfind() и увеличивая счетчик вforEach() петля.

Как узнать реальное количество документов? Во-первых, я знаю тенденцию роста, то есть она не может возрастать так радикально. Во-вторых, когда я считаю документы с помощью следующего сценария M / R, я получаю реальное количество документов (как я предполагаю). Я использую этот скрипт, чтобы увидеть дубликаты документов. Количество дубликатов составляет несколько тысяч, а не миллионов. И рассчитывать наtest_duplicate_collection минус дубликаты дает мне реальное количество документов.

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 );

Теперь я понимаю, что во время балансировки может случиться так, что некоторые чанки еще не будут удалены при переносе их в другой осколок. Но я вижу в статусе (sh.status()) что все куски распределены одинаково. Я также попытался приостановить операции записи, чтобы узнать, занимает ли это какое-то время, но ничего не произошло.

Вы могли бы сказать, что удаление перемещенных фрагментов все еще продолжается, и, действительно, когда я только начал использовать шардинг, я увидел небольшое уменьшение (без операций записи) для сегментированного сбора. Но в настоящее время никаких изменений с течением времени нет, они просто стоят на месте. Я пытался также использоватьorphanage.js с надеждой найти осиротевшие документы (используя скрипт изhttps://groups.google.com/forum/#!topic/mongodb-user/OKH5_KDO04I) но таких документов найдено не было.

Мой вопрос в том, что может быть причиной того, чтоcount() а такжеfind().forEach() дать больше, чем реальное количество документов (то есть против сценария M / R).

Ценю твою помощь.

EDIT1

Возникла проблема с настройкой набора репликации в одном из сегментов. В частности, мастер не был установлен в файле конфигурации. В панели инструментов MMS вместоPrimary Я всегда виделSlave для хоста, который прослушивался другими хостами репликации. Когда мы это исправили,forEach Счетчик циклов начал показывать то же количество документов, что и в сценарии M / R выше. Таким образом, единственная проблема в настоящее время сcount() сам.

В MongoDB JIRA я обнаружил следующую неразрешенную ошибку с count () в защищенной средеhttps://jira.mongodb.org/browse/SERVER-3645 Но это действительно относится к count () во время балансировки, то есть count может подсчитывать фрагменты, которые в данный момент перемещаются балансировщиком. В качестве обходного пути эта ошибка предлагает поставить запрос, который всегда верен. Я попробовал это также, но все равно это возвращает счет как прежде.

Ответы на вопрос(1)

Ваш ответ на вопрос