2015-06-08 2 views
5

Это звучит странно, и я надеюсь, что что-то сделаю неправильно, но моя коллекция MongoDB возвращает счетчик одним в моей коллекции.Неверный счет, возвращенный MongoDB (WiredTiger)

У меня есть коллекция с (я уверен) 359671 документов. Однако команда count() возвращает 359670 документов.

Я уверен, выполнение команды COUNT() с помощью Монго оболочки:

rs0:PRIMARY> db.COLLECTION.count() 
359670 

Это неправильно.

Это не находит каждый документ в моей коллекции.

Если я обеспечиваю следующий запрос для подсчета, я получаю правильный результат:

rs0:PRIMARY> db.COLLECTION.count({_id: {$exists: true}}) 
359671 

Я считаю, что это ошибка в WiredTiger. Насколько мне известно, каждый документ имеет то же определение, поле _id целого числа от 0 до 359670 и поле BinData. У меня не было этой проблемы с более старым механизмом хранения (или Mongo 2, это могло вызвать проблему).

Является ли это чем-то, что я сделал неправильно? Я не хочу использовать запрос {_id: {$ exists: true}}, поскольку для завершения требуется 100 раз.

+1

Вы используете осколки кластера? Если это так, см. Http://docs.mongodb.org/manual/reference/method/db.collection.count/#sharded-clusters – JohnnyHK

+0

Я не использую осколок кластера, но спасибо за ваше предложение. – James

ответ

9

В соответствии с этим issue это поведение может возникать, если mongodb испытывает сильный крушение и не закрывается изящно. Если не выдавать какой-либо запрос, mongodb, вероятно, просто возвращается к собранной статистике.

В соответствии со статьей, вызов db.COLLECTION.validate(true) должен сбросить счетчики.

Смежные вопросы