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

问题描述 投票:1回答:1

我的收藏中有一份文件:

{
"_id" : ObjectId("5b8aaaebf57de10e080c9151"),
"user_email" : "[email protected]",
"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: "[email protected]" } }, { $unwind: "$platforms_budget" },
    { $project: { "platforms_budget.count": { $size: '$platforms_budget' } } }])

  console.log(length);
})

当我尝试console.log(长度)时,我得到一个空数组。

我在stackoverflow上看到了像this one的其他答案,但我仍然无法理解我做错了什么或如何从响应中提取大小。

如何获得“platforms_budget”数组大小?谢谢。

javascript mongodb mongoose size aggregate
1个回答
0
投票

假设../models/Budget导出ModelModel#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
});

我个人仍然有点混淆about the documentation .aggregate(Array, Function)

如果传递回调,则执行聚合并返回Promise。如果未传递回调,则返回聚合本身。

听起来如果回调被传递,仍然会返回承诺,但我找不到任何有任何承诺由.aggregate(Array, Function) on GitHub at all返回的证据。

© www.soinside.com 2019 - 2024. All rights reserved.