У меня есть коллекция со многими похожими структурированными документами, два документа выглядят как
Входные данные:
{
"_id": ObjectId("525c22348771ebd7b179add8"),
"cust_id": "A1234",
"score": 500,
"status": "A"
"clear": "No"
}
{
"_id": ObjectId("525c22348771ebd7b179add9"),
"cust_id": "A1234",
"score": 1600,
"status": "B"
"clear": "No"
}
По умолчанию clear для всего документа является "No",
Требование: Я должен добавить оценку всех документов с одинаковым cust_id, при условии, что они принадлежат status "A" и status "B". Если score превышает 2000 тогда я должен обновить атрибут clear на "Yes" для всех документов с одинаковым cust_id.
Ожидаемый результат:
{
"_id": ObjectId("525c22348771ebd7b179add8"),
"cust_id": "A1234",
"score": 500,
"status": "A"
"clear": "Yes"
}
{
"_id": ObjectId("525c22348771ebd7b179add9"),
"cust_id": "A1234",
"score": 1600,
"status": "B"
"clear": "Yes"
}
Да, потому что 1600 + 500 = 2100 и 2100> 2000.
Мой подход: я смог получить сумму только по статистической функции, но не смог обновить
db.aggregation.aggregate([
{$match: {
$or: [
{status: 'A'},
{status: 'B'}
]
}},
{$group: {
_id: '$cust_id',
total: {$sum: '$score'}
}},
{$match: {
total: {$gt: 2000}
}}
])
Пожалуйста, предложите мне, как мне поступить.