Получить индекс элемента в массиве в MongoDB

похожий на

-Агрегация: добавьте параметр $unwind для создания индекса массива

-Получить индекс элемента в запросе mongodb

У меня есть этот вариант использования.

Рейтинг самых вкусных фруктов:

{"date": "Jan 1st",
"fruit_ranking": ["Apple", "Orange", "Grape", "Kiwi", "Mango", "Pear"]},
{"date": "Jan 2nd",
"fruit_ranking": ["Orange", "Grape", "Kiwi", "Pear", "Apple"]}
.....
{"date": "Dec 31st",
"fruit_ranking":  ["Kiwi", "Apple", "Grape", "Mango", "Pear"]}

Я пытаюсь получить рейтинг «Груши» за каждый день с 1 января по 31 декабря, и прямо сейчас мне нужно вернуть все массивы и выполнить indexOf в моем приложении. Значительно ускорит мое приложение, если есть какой-то способ сделать это в MongoDB и просто вернуть индекс "Pear" вместо всего массива.

Я просмотрел Map Reduce, но документация, похоже, предполагает, что вам нужна функция сокращения, которая не работает.

Также просмотрел структуру агрегации, но этот JIRA предполагает, что он еще не реализован.

Наконец, я изучил скрипты на стороне сервера, но кажется слишком продвинутый для простого варианта использования.

Любая помощь будет принята с благодарностью!


person makeshifthoop    schedule 11.01.2014    source источник


Ответы (1)


Не тестировал этот код, но он должен работать.

Предполагая, что имя базы данных, в котором это хранится, равно tastyFruits...

tastyFruits.find({}).forEach(function(a){
console.log("Date: " + a.date);
console.log("Pear rating: " + a.fruit_ranking.indexOf("Pear"));
});
person mjkaufer    schedule 12.01.2014
comment
Интересная концепция. К сожалению, это только регистрирует индексы в журналах MongoDB, но фактически не возвращает индексы. пс. его print(), а не console.log() - person makeshifthoop; 12.01.2014
comment
Если вы хотите вернуть индексы, просто поместите эти грушевые рейтинги в массив и верните массив. Не уверен, какой язык вы используете, поэтому я не могу вам помочь. - person mjkaufer; 12.01.2014
comment
Спасибо! Оно работает. Это немного отрывочно из-за проблем с впрыском, но оно работает и очень быстро. - person makeshifthoop; 13.01.2014
comment
привет, mjkaufer, не могли бы вы изменить свой ответ на печать вместо console.log для ясности в будущем? - person makeshifthoop; 13.01.2014