猫鼬:获取具有聚合的对象数组的大小

时间:2018-09-01 16:36:05

标签: javascript mongodb mongoose size aggregate

我的收藏夹中有一个文档:

{
"_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”数组大小? 谢谢。

1 个答案:

答案 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返回任何承诺的证据。