Карта MongoDB позволяет уменьшить странный результат

Я внедряю упрощенную карту «get max value» в MongoDB (драйвер c #). Для моих тестов у меня есть 10 элементов в коллекции с int _id = 1 до 10.

Моя карта и сокращение:

var map = "function() {emit('_id', this.Id);}";
var reduce = "function(key, values) {var max = 1; for (id in values) {if(id>max) {max=id;}} } return max;}";

Когда я бегу, я получаю результат 9, странный!

Я думаю, что карта выводит строку, и, таким образом, сравнение не работает по желанию. Любая помощь будет отличной

0
nl ja de
Можете ли вы убедиться, что ваши данные (поле Id) на самом деле являются числом, а не строкой?
добавлено автор Thilo, источник
действительно выглядит как сравнение строк, а не чисел.
добавлено автор notXX, источник
Все ли ваши идентификаторы уникальны? Функция уменьшения не будет работать, потому что она ожидает массив в значениях, тогда как при наличии только одного элемента для ключа функция уменьшения просто не запускается. Поэтому я подозреваю, что у вас более одного элемента с идентификатором 9.
добавлено автор cubbuk, источник
Если все идентификаторы уникальны, а ваш ключ на карте - это только этот идентификатор, фаза уменьшения не будет работать из-за проблемы с дизайном. Проверьте jira jira.mongodb.org/browse/SERVER-5818 Если вы просто пытаясь познакомиться с уменьшением карты, я бы предложил попробовать разные сценарии, где использование map-reduce действительно имеет смысл.
добавлено автор cubbuk, источник
вы радушны =)
добавлено автор cubbuk, источник
_id - это int. Я проверил в оболочке mongo, а _id = 10 определяется как «_id»: 10
добавлено автор joe, источник
Да, все идентификаторы уникальны. На данный момент у меня только 10 элементов в БД, поэтому его довольно легко проверить
добавлено автор joe, источник
Спасибо, кубук. Да, я пытаюсь получить список всех различных сценариев, с которыми я могу использовать Map Reduce. Теперь я понимаю, было бы глупо использовать этот сценарий на практике. Что сумасшедшее, так это то, что в Интернете есть много примеров, которые делают именно это. Пожалуйста, отправьте свой комментарий в качестве ответа, это было действительно полезно
добавлено автор joe, источник

1 ответы

Функция уменьшения не будет работать, если значения содержат только один элемент. Если все идентификаторы уникальны, а ваш ключ на карте - это только этот идентификатор, фаза уменьшения не будет работать из-за проблемы с дизайном (для повышения производительности). Если вам нужно изменить формат вашего сокращения, вы должны использовать метод finalize . Или просто взгляните на структуру aggregation framework , которая предоставляет весьма полезные инструменты для воспроизведения данных.

Проверьте джиру

<Р> jira.mongodb.org/browse/SERVER-5818

Если вы просто пытаетесь познакомиться с уменьшением карты, я бы предложил попробовать разные сценарии, где использование map-reduce действительно имеет смысл

ура

1
добавлено
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MongoDB Russian
MongoDB Russian
1 086 участник(ов)

> db.stats() https://combot.org/chat/-1001035023078