У меня есть следующая коллекция документов MongoDB, каждый из которых содержит поле с именем «history», которое содержит массив поддокументов с полями «date» и «points».
[{
history: [{
date: "2019-20-20",
points: 1,
}, {
date: "2019-20-21",
points: 1,
}, {
date: "2019-20-22",
points: 1,
}, {
date: "2019-20-23",
points: 1,
}],
}, {
history: [{
date: "2019-20-20",
points: 1,
}, {
date: "2019-20-21",
points: 2,
}, {
date: "2019-20-22",
points: 3,
}, {
date: "2019-20-23",
points: 4,
}],
}]
Я не уверен, каков наилучший способ построить запрос, который выдает следующие результаты. Для следующего примера диапазон дат (включительно) - от «2019-20-21» до «2019-20-22». «totalPoints» - это новое поле, которое содержит сумму всех точек в поле «история» в этом диапазоне дат.
[{
history: [{
date: "2019-20-20",
points: 1,
}, {
date: "2019-20-21",
points: 1,
}, {
date: "2019-20-22",
points: 1,
}, {
date: "2019-20-23",
points: 1,
}],
totalPoints: 2,
}, {
history: [{
date: "2019-20-20",
points: 1,
}, {
date: "2019-20-21",
points: 2,
}, {
date: "2019-20-22",
points: 3,
}, {
date: "2019-20-23",
points: 4,
}],
totalPoints: 5,
}]
Ниже приведено общее представление о том, что я пытаюсь сделать:
User.aggregate([{
$addFields: {
totalPoints: { $sum: points in "history" field if date range between "2019-20-21" and "2019-20-22" } ,
}
}]);
Причина, по которой я хочу создать новое поле "totalPoints", заключается в том, что в конечном итоге я хочу отсортировать через поле "totalPoints".