MongoDB collection toArray () длина на 20 меньше, чем collection.count () - PullRequest
0 голосов
/ 26 апреля 2020

Я использую версию mongoDB 3.6.3 в операционной системе Ubuntu. Я создал коллекцию из 100 записей

Чтобы манипулировать данными на оболочке mon go, я назначаю курсор, как показано ниже

cur = db.dummyData.find({}, {_id: 0})

, теперь cur.count() это 100, но cur.toArray().length это 80.

Я не уверен, почему это происходит. Я пробовал с кучей разных коллекций, чтобы toArray () длина всегда была на 20 меньше, чем фактическое количество.

Буду признателен за любую помощь, чтобы понять это поведение.

1 Ответ

0 голосов
/ 27 апреля 2020

MongoDB хранит текущий счетчик документов для каждой коллекции, который обновляется для каждой операции вставки / удаления. В некоторых случаях такое жесткое завершение может привести к тому, что это число в метаданных будет отличаться от фактической коллекции.

Функция cursor.count() запрашивает MongoDB, запрашивая это число из метаданных, без извлечения каких-либо документов, поэтому это очень быстрый. Функция cursor.itcount() на самом деле извлекает документы, поэтому она будет работать медленнее, но всегда будет возвращать точный счет.

Чтобы исправить счет в метаданных коллекций, запустите db.collectionName.validate(true) для рассматриваемой коллекции из пн go оболочка.

...