Запуск версии MongoDB> = 4.0
вы можете использовать $ toInt для преобразования строки в int, попробуйте следующий код:
covid_data.aggregate([
{
$group: {
_id: "",
TotalStudents: { $sum: { $toInt: "$TotalStudent" } },
TotalPresent: { $sum: { $toInt: "$TotalPresent" } }
}
}
], (err,docs)=>{
if(err){
console.log(err);
return res.status(500).send(err);
}
else{
console.log(docs);
res.send(docs);
}
});
Тест: mongoplayground
Примечание: На этапе $group
_id
должно быть _id: ""
, чтобы сгруппировать по всем документам (использование _id:"$_id"
приведет к при возврате почти тех же данных, поскольку _id
уникален для каждого do c). Кроме того, у вас есть пара опечаток в $sum
, в {$sum:"TotalPresent"}
также в {$Sum:"$TotalStudents"}
.
Обновление: Обновленный ответ с новым требованием: поскольку исходный запрос не выполняется из-за наличия ,
: '1,233,273'
.
db.collection.aggregate([
/** Re-create two string fields without `,` */
{
$addFields: {
TotalStudent: {
$reduce: {
input: { $split: [ "$TotalStudent", "," ] },
initialValue: "",
in: { $concat: [ "$$this", "$$value" ] }
}
},
TotalPresent: {
$reduce: {
input: { $split: [ "$TotalPresent", "," ] },
initialValue: "",
in: { $concat: [ "$$this", "$$value" ] }
}
}
}
},
{
$group: {
_id: "",
TotalStudents: { $sum: { $toInt: "$TotalStudent" } },
TotalPresent: { $sum: { $toInt: "$TotalPresent" } }
}
}
])
Тест: mongoplayground
Нам нужно разделить строку на основе разделителя ,
и объединить все строки в массиве в одну, используя $reduce
. Этого можно избежать, используя $replaceOne
стартовую версию MongoDB> = 4.4
, проверьте это :: how-to-replace-substring-in-mongodb-document , используйте эту ссылку, если вы хотел обновить данные.
Примечание: Я настоятельно рекомендую рассмотреть мой вышеупомянутый комментарий:
Итак, концепция, о которой все говорят, заключается в следующем: напишите это один раз в идеальном виде, чтобы прочитать его n раз с легкостью ... Итак, теперь нам нужно проделать n количество приемов, чтобы заставить его работать каждый раз, когда мы его читаем. Итак, вы хотите обновить все данные числами? - Я бы сказал сделать это или даже могу предоставить запрос, который будет работать, но я бы не стал отказываться от обновления данных до правильного формата.