С помощью функции countDocuments()
можно получить общее количество документов в коллекции:
db.users.countDocuments()
Если нам надо узнать не совокупное количество документов в коллекции, а только количество документов в конкретной выборке, то можно применять функцию count(). Например, подсчитаем количество документов, у которых name=Tom:
db.users.find({name: "Tom"}).count()
Более того мы можем создавать цепочки функций, чтобы конкретизировать условия подсчета:
db.users.find({name: "Tom"}).skip(2).count(true)
Здесь надо отметить, что по умолчанию функция count не используется с функциями limit и skip. Чтобы их использовать, как в примере выше,
в функцию count надо передать булевое значение true
В коллекции могут быть документы, которые содержат одинаковые значения для одного или нескольких полей. Например, в нескольких документах определено name: "Tom"
.
И нам надо найти только уникальные различающиеся значения для одного из полей документа. Для этого мы можем воспользоваться
функцией distinct. Например, пусть в базу данных добавлены следующие документы:
db.users.insertOne({"name": "Tom", "age": 38, languages: ["english", "spanish"]}) db.users.insertOne({"name": "Bob", "age": 41, languages: ["english", "french"]}) db.users.insertOne({"name": "Sam", "age": 28, languages: ["english"]}) db.users.insertOne({"name": "Tom", "age": 22, languages: ["english", "german"]})
Выведем все уникальные значения по полю "name":
test> db.users.distinct("name") [ 'Bob', 'Sam', 'Tom' ] test>
Функции min и max устанавливает для определенного поля минимальное значение для попадания в выборку. При этом данные функции могут использовать только те поля, для которых установлены индексы. Например, возьмем выше опеределенную коллекцию db.users и определим в ней индекс для поля age:
db.users.createIndex({"age": 1})
При выполнении функции также надо использовать функцию hint()
, в которую передается индекс.
Например, выберем все документы, в которых поле age больше 30:
test> db.users.find().min({age:30}).hint({age:1}) [ { _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({age:30}).hint({age:1}) [ { _id: ObjectId("62e3d64079a0a7792a9de213"), name: 'Tom', age: 22, languages: [ 'english', 'german' ] }, { _id: ObjectId("62e3d63a79a0a7792a9de212"), name: 'Sam', age: 28, languages: [ 'english' ] } ] test>