Количество документов в коллекции MongoDB
Иногда нам нужно знать какое количество документов содержит коллекция. В этом нам поможет метод count . Давайте с его помощью найдем количество документов в коллекции с юзерами:
let res = await coll.count(); console.log(res);
А теперь узнаем количество юзеров, у которых возраст равен 26 лет:
let res = await coll.count(
Узнайте, сколько документов в коллекции с продуктами.
Узнайте, сколько продуктов имеет цену 500 .
Как запросить количество документов в коллекции MongoDB?
Sergey Ovechkin: .count() принимает точно такие же запросы, как и .find(), если что.
Константин Китманов: да только пока пляшешь в консоли с db.collection.find(), чтобы убедиться, что именно то ты видишь. Перепечатывать find на count смысла нет, проще его сзади добавить
FaionWeb @FaionWeb Автор вопроса
Как узнать количество документов в коллекции mongodb
С помощью функции countDocuments() можно получить общее количество документов в коллекции:
db.users.countDocuments()
Если нам надо узнать не совокупное количество документов в коллекции, а только количество документов в конкретной выборке, то можно применять функцию count() . Например, подсчитаем количество документов, у которых name=Tom:
db.users.find().count()
Более того мы можем создавать цепочки функций, чтобы конкретизировать условия подсчета:
db.users.find().skip(2).count(true)
Здесь надо отметить, что по умолчанию функция count не используется с функциями limit и skip. Чтобы их использовать, как в примере выше, в функцию count надо передать булевое значение true
Функция distinct
В коллекции могут быть документы, которые содержат одинаковые значения для одного или нескольких полей. Например, в нескольких документах определено name: «Tom» . И нам надо найти только уникальные различающиеся значения для одного из полей документа. Для этого мы можем воспользоваться функцией distinct . Например, пусть в базу данных добавлены следующие документы:
db.users.insertOne() db.users.insertOne() db.users.insertOne() db.users.insertOne()
Выведем все уникальные значения по полю «name»:
test> db.users.distinct("name") [ 'Bob', 'Sam', 'Tom' ] test>
Функции min и max
Функции min и max устанавливает для определенного поля минимальное значение для попадания в выборку. При этом данные функции могут использовать только те поля, для которых установлены индексы. Например, возьмем выше опеределенную коллекцию db.users и определим в ней индекс для поля age:
db.users.createIndex()
При выполнении функции также надо использовать функцию hint() , в которую передается индекс. Например, выберем все документы, в которых поле age больше 30:
test> db.users.find().min().hint() [ < _id: ObjectId("62e3d63a79a0a7792a9de210"), name: 'Tom', age: 38, languages: [ 'english', 'spanish' ] >, < _id: ObjectId("62e3d63a79a0a7792a9de211"), name: 'Bob', age: 41, languages: [ 'english', 'french' ] >] test>
Аналогичным образом работает функция max() , которая устанавливает максимальное значение. Например, выберем документы, где age меньше 30:
test> db.users.find().max().hint() [ < _id: ObjectId("62e3d64079a0a7792a9de213"), name: 'Tom', age: 22, languages: [ 'english', 'german' ] >, < _id: ObjectId("62e3d63a79a0a7792a9de212"), name: 'Sam', age: 28, languages: [ 'english' ] >] test>
Как узнать общее кол-во созданных документов в коллекции mongodb за всё время?
Понятно что можно создать отдельное поле для этих целей. Но возможно ли добиться этого стандартным функционалом mongodb?
Отслеживать
Anton Manevskiy
задан 15 июн 2016 в 13:03
Anton Manevskiy Anton Manevskiy
448 2 2 серебряных знака 9 9 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Нужно использовать метод count() если вы хотите знать кол-во документы в коллекции
db.collection.count()
Но нет никакого способа знать кол-во созданных за всё время жизни коллекции, в том числе те, которые были удалены.
Отслеживать
ответ дан 15 июн 2016 в 13:06
581 5 5 серебряных знаков 22 22 бронзовых знака
я в java посчитал так:
collection.countDocuments();
Отслеживать
ответ дан 18 янв 2022 в 11:43
19 8 8 бронзовых знаков
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.