Каждая запись в моем mongoDB имеет вид
{"_id" : date,
"tickers" = [{"ticker": ticker, "open": open, "close":close}]
, где вся коллекция представляет собой год данных.Я пытаюсь сгруппировать по дням, а затем на каждый день получаю тикер с максимально открытым открытием.Ниже моя лучшая попытка, но она не работает должным образом.
db.stocks.aggregate([
{$unwind: '$tickers'},
{"$sort": {"_id": 1, "tickers.open": -1}},
{"$group": {
"_id": "_id",
"ticker": { "$first": "$tickers.ticker"},
"open": { "$first": "$tickers.open" },
"close": { "$first": "$tickers.close" }
}}
])
Ниже приведен пример записи 252 в БД
{
"_id" : "19990726",
"tickers" : [
{
"ticker" : "luk",
"close" : 5.96998,
"open" : 6.07182
},
{
"ticker" : "cce",
"close" : 15.0793,
"open" : 15.2627
},
{
"ticker" : "bac",
"close" : 22.4244,
"open" : 21.9815
},
{
"ticker" : "cci",
"close" : 24.5,
"open" : 24.19
},
{
"ticker" : "kss",
"close" : 35.7964,
"open" : 36.3512
},
{
"ticker" : "luv",
"close" : 13.0781,
"open" : 13.2789
},
{
"ticker" : "mwv",
"close" : 16.5388,
"open" : 17.0901
}
]
}
, и когда я выполняю свой запрос, я получаю только
{ "_id" : "_id", "ticker" : "aig", "open" : 812.485, "close" : 829.651 }
Когда ядолжна возвращать одну запись для каждого «_id» плюс один элемент из подмассива «tickers» для этой записи, содержащей тикер с максимальным открытием.
Когда я пытаюсь изменить теперь работающий запрос, я путаю синтаксис для вычисления вложенности, чтобы вычислить изменение дня, а не макс.Может ли кто-нибудь помочь мне правильно их вложить?
db.stocks.aggregate([
{$unwind: '$tickers'},
{"$sort": {"_id": 1, {$abs: { 1 - $divide: [ "$tickers.close", "$tickers.open" ] }}: -1}},
{"$group": {
"_id": "$_id",
"ticker": { "$first": "$tickers.ticker"},
"open": { "$first": "$tickers.open" },
"close": { "$first": "$tickers.close" }
}}
]);