это должна быть простая проблема - я новичок в mongodb, но я все еще застрял в этом.Тот же запрос в nodeJS, возвращающий 0 в aggegate, но в mongodb он выглядит нормально
У меня есть коллекция пожертвований
/* 1 */
{
"_id" : ObjectId("5b9b625c0ffcdb7c339a8961"),
"username" : "abc@xyz.com",
"amount" : 500,
"badge" : true,
"addedAt" : 1536909914979.0,
"first_name" : "john",
"last_name" : "Doe",
"email" : "abc@xyz.com"
}
/* 2 */
{
"_id" : ObjectId("5b9b62e00ffcdb170b9a8962"),
"username" : "abc@xyz.com",
"amount" : 5000,
"badge" : false,
"addedAt" : 1536910048238.0,
"first_name" : "John",
"last_name" : "Doe",
"email" : "abc@xyz.com"
}
Проверка запроса в оболочке mongodb, результаты ожидаемые:
db.getCollection('donations').aggregate([
{
'$group' : {
'_id' : null,
'total_donations' : {'$sum' : "$amount"}
}
}
])
РЕЗУЛЬТАТ:
/* 1 */
{
"_id" : null,
"total_donations" : 5500
}
В NodeJS у меня есть:
connectToDb(dbUri).then(function (db) {
db.collection('donations').find().sort(sorting).limit(limit).toArray(function (err, arr) {
if (err) {
console.log(err)
res.status(500).json({
message: "Failed to fetch donations"
}).end();
} else {
var allDonations = {};
var query = [
{
'$group' : {
'_id' : null,
'total_donations' : {'$sum' : "$amount"}
}
}
];
db.collection('bottles').aggregate(query).toArray(function(err, result){
if(err) console.log(err);
allDonations['total_donations'] = result[0].total_donations;
allDonations['donations'] = arr;
console.log(allDonations);
});
}
});
Результат [0] .total_donations здесь возвращает как 0 все, что мне не хватаетздесь?
ОБНОВЛЕНИЕ 1
Как подсказал Энтони в комментариях, я изменил код ниже:
connectToDb(dbUri).then(function (db) {
var query = [
{
'$group' : {
'_id' : null,
'total_donations' : {'$sum' : "$amount"}
}
}
];
db.collection('bottles').aggregate(query).then(result => {
console.log(result);
})
.catch(error =>{
console.log(error);
});
});
но теперь яполучить следующую ошибку:
(node:16708) UnhandledPromiseRejectionWarning: TypeError: db.collection(...).aggregate(...).then is not a function
warning.js:18