Я новичок в написании запросов в MongoDB.
Я пытаюсь вычислить процентное изменение рейтинга mov ie между его текущим рейтингом и его последним предыдущим рейтингом. Я хочу отсортировать по уменьшению процентного изменения.
Предыдущие рейтинги хранятся в поле «changelog», а самые последние предыдущие рейтинги находятся в последнем индексе массива «changelog».
Вот как выглядит коллекция:
"changelog": [{
--Earliest Version--
"Title": "Foo",
"Director": "Bar",
"Genre": "Action",
"rating": {
"$numberDouble": "3.45"
}
},
{
--Most recent previous version of this movie, the one I want--
"Title": "Foo",
"Director": "Bar",
"Genre": "Action",
"rating": {
"$numberDouble": "4.96"
}
}],
--here is current movie info--
"Title": "Foo",
"Director": "Bar",
"Genre": "Action",
"rating": {
"$numberDouble": "4.99"
}
Теперь я пытаюсь написать запрос, который создает поле "процент_замена" и сортирует его в порядке убывания. Сначала я разрезаю журнал изменений, чтобы получить только последний элемент.
Моя проблема связана с доступом к последней оценке в массиве журнала изменений. Ошибка: «Невозможно вычесть двойное число по массиву», поэтому "$last_changelog.rating"
возвращает массив с одним элементом, но я не знаю, как просто получить само двойное число.
db.collection.aggregate(
[
{"$project": {
"_id": 1,
"rating": true,
"changelog": true,
"last_changelog": {"$slice": ["$changelog", -1]}
}
},
{"$project":{
"_id":"$_id",
"rating": "$rating",
"percent_change": {
# more arithmetic is needed
"$subtract": ["$rating", "$last_changelog.rating"]}, # error is here, doesn't get correct previous rating value.
}
},
{"$sort": {"percent_change": -1}},
])
ПРИМЕЧАНИЕ. Мне нужно использовать здесь aggregate (), потому что я работаю в программе визуализации Metabase, и это единственный запрос, который они поддерживают. Спасибо за помощь!