Лучший способ считать документы в mongoDB - PullRequest
0 голосов
/ 23 января 2020

у нас есть коллекция с большим количеством документов, скажем, около 100к. Теперь мы хотим подсчитать количество документов, для которых установлен ключ x.

Если я попробую его с Collection.countDocuments({ x: { $exists: true }}), я получу результат, но он мгновенно создает предупреждение в консоли: Ориентация на запрос: количество отсканированных / возвращенных объектов превысило 1000 .

Итак, есть ли лучший способ для подсчета документов? На поле есть Index, возможно ли получить длину индекса?

Спасибо

Ответы [ 3 ]

1 голос
/ 23 января 2020

Возвращаемый размер ключа indexSize, как в пробеле, используемом для хранения, не учитывается

Проверьте с объяснением, если индекс используется или нет. (Обновление в вопросе также)

может использовать параметр подсказки для проверки производительности после указания индекса

. Или предварительный расчет с помощью оператора $ в c может быть хорошим вариантом, если это возможно, в вашем случае использования

попробуйте cursor.count, если его более быстрый countDocument должен был быть быстрее, но без вреда при проверке https://docs.mongodb.com/manual/reference/method/cursor.count/

1 голос
/ 23 января 2020

Нет реального способа просмотра деревьев индексов в Mon go, то, что другие люди связали, вы просто возвращаете размер дерева, я не уверен, насколько полезна эта информация в этом контексте.

Теперь к вашему вопросу это лучший способ считать? Ответ Да ... -i sh.

countDocuments - это функция-обертка, она просто имитирует следующий конвейер:

db.collection.aggregate([
   { $match: <query> },
   { $group: { _id: null, n: { $sum: 1 } } } )
])

Этот конвейер наиболее эффективный способ go, но разница между запуском этой агрегации и использованием функции обертки составляет около 100-200 миллисекунд, в зависимости от вашей машины. spe c.

Значение, если вы ищете На «лучшую» производительность вы не найдете его.

С учетом сказанного, это предупреждение глупо, это просто означает, что у вас есть более 1000 документов с этим полем. Истинная цель этого - предупредить вас, если вы пытаетесь запросить 1-20 документов без правильного индекса.

1 голос
/ 23 января 2020

Вы можете использовать поле indexSizes, возвращаемое методом stats().
Метод stats() "Возвращает статистику о коллекции".

См. Пример здесь:
https://docs.mongodb.com/manual/reference/method/db.collection.stats/#basic -stats-lookup

{
    ...,
    "indexSizes" : {
      "_id_" : 237568,
      "cuisine_1" : 143360,
      "borough_1_cuisine_1" : 151552,
      "borough_1_address.zipcode_1" : 151552
    },
   ...
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...