Как сгруппировать значения по отметке времени - PullRequest
0 голосов
/ 04 ноября 2019

Для каждой сущности в базе данных у меня есть массив временных отметок с ценами, я хочу сгруппировать их по временной отметке и получить среднюю цену для этой временной отметки.

В настоящее время я использую mongoose, и я пробовал различные функции для группировкиby, но я не нашел решения для группировки по каждому элементу.

{ 
 _id : "52b632a9e4f2ba13c82ccd23", 
 history-dates : [2019-10-1, 2019-10-2, 2019-10-3, 2019-10-4]
 history-prices : [1000.0, 2000.0, 500.0, 1500.0]
}, 

{ 
 _id : "52b632a9e4f2ba13c82ccd23", 
 history-dates : [2019-10-1, 2019-10-2, 2019-10-3, 2019-10-4]
 history-prices : [2000.0, 3000.0, 1500.0, 2500.0]
}

Я хочу получить такой результат, как:

date: 2019-10-1
avgPrice : 1500.0

Как мне добиться этого и заранее спасибо.

1 Ответ

1 голос
/ 11 ноября 2019

Как Нил указал, что вам следует немного изменить структуру документа

Итак, введите поле historicalPrices с типом array, имеющим структуру: [{ date: "2019-10-1", price: 1000.0 }]

Тогда выМожно применить следующий запрос, чтобы получить среднюю цену, сгруппированную по дате

db.mycollection.aggregate([
  { $unwind: "historicalPrices" },
  { $group: { 
      "_id": "$historicalPrices.date",
      avgPrice:{ $avg: "$historicalPrices.price" }
      } 
  }
])
//Result: [{ _id: "2019-10-01", avgPrice: 1500.0 }, ....]

Узнайте больше о Агрегационный конвейер , $ unwind , $ group $ avg

...