我的收藏夹中有一个文档:
{
"_id" : ObjectId("5b8aaaebf57de10e080c9151"),
"user_email" : "temp@temp.com",
"platforms_budget" : [
{
"_id" : ObjectId("5b8aaaebf57de10e080c9154"),
"platform_id" : "f_01",
"platform_name" : "Facebook"
},
{
"_id" : ObjectId("5b8aaaebf57de10e080c9153"),
"platform_id" : "i_01",
"platform_name" : "Instagram"
},
{
"_id" : ObjectId("5b8aaaebf57de10e080c9152"),
"platform_id" : "f_02",
"platform_name" : "Facebook_Adds"
}
],
"__v" : 0
}
我想通过“ user_email”查找特定用户,并获取相关“ platform_budget”数组的长度。在这种情况下,假设长度为3。
我的功能是这样的:
var BudgetSchema = require('../models/Budget');
router.post('/temp', async function (req, res) {
var length = await BudgetSchema.aggregate(
[{ $match: { user_email: "test@test.com" } }, { $unwind: "$platforms_budget" },
{ $project: { "platforms_budget.count": { $size: '$platforms_budget' } } }])
console.log(length);
})
当我尝试console.log(length)时,我得到一个空数组。
我在stackoverflow上看到了其他答案,例如this one,但我仍然不明白我在做什么错或者如何从响应中提取大小。
如何获取“ platforms_budget”数组大小? 谢谢。
答案 0 :(得分:0)
假设../models/Budget
导出Model,则Model#aggregate(Array, Function)期望将带有聚合的管道作为一个数组,并将一个可选的回调函数传递给错误(如果有)和结果( (如果有)。
.aggregate([...], function(error, resource) {
// do what you want here
});
或者您也可以使用Aggregate
对象本身,并在函数也是回调的情况下调用.exec(Function)
。
.aggregate([...]).exec(function(error, resource) {
// do what you want here
});
我个人仍然对.aggregate(Array, Function)
的{{3}}感到困惑。
如果传递了回调,则将执行聚集并返回Promise。如果未传递回调,则将返回聚合本身。
这听起来像是如果传递了回调,则仍会返回承诺,但我找不到.aggregate(Array, Function)
about the documentation返回任何承诺的证据。