Есть ли запрос для расчета количества различных значений, содержащихся в поле в БД.
fe У меня есть поле для страны, и есть 8 типов значений страны (Испания, Англия, Франция и т. д.)
Если кто-то добавит больше документов с новой страной, я бы хотел, чтобы запрос вернул 9.
Есть ли способ попроще, чем сгруппировать и посчитать?
Ответы:
В MongoDB есть
distinct
команда, которая возвращает массив различных значений для поля; вы можете проверить длину массива для подсчета.Также есть
db.collection.distinct()
помощник оболочки :источник
Вот пример использования API агрегации. Чтобы усложнить случай, мы группируем по словам без учета регистра из свойства массива документа.
которые дают такой результат, как
источник
unwind
необходим, потому что код группирует отдельные значения поля массива, которое соответствует принципуdistinct
работы.unwind
необходим при работе с массивами.В MongoDb 3.4.4 и новее вы можете использовать
$arrayToObject
оператор и$replaceRoot
конвейер для получения подсчетов.Например, предположим, что у вас есть группа пользователей с разными ролями, и вы хотите подсчитать количество различных ролей. Вам потребуется запустить следующий агрегатный конвейер:
Пример вывода
источник
.distinct()
.Вы можете использовать расширения Mongo Shell . Это единый импорт .js, который вы можете добавить в свой
$HOME/.mongorc.js
или программно, если вы тоже кодируете на Node.js / io.js.Образец
Для каждого отдельного значения поля подсчитывается количество вхождений в документах, дополнительно отфильтрованных по запросу.
Параметр поля может быть массивом полей
источник
require("./script.js")
, я полагаю.mongorc.js
файл в свой домашний каталог. Готово.Чтобы найти разные в
field_1
коллекции, но намWHERE
тоже нужно какое-то условие, чем мы можем сделать следующим образом:db.your_collection_name.distinct('field_1', {WHERE condition here and it should return a document})
Итак, найдите число, отличное
names
от коллекции, где возраст> 25 будет примерно таким:db.your_collection_name.distinct('names', {'age': {"$gt": 25}})
Надеюсь, поможет!
источник