Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将聚合结果保存到外部变量中?_Javascript_Node.js_Mongodb_Express - Fatal编程技术网

Javascript 如何将聚合结果保存到外部变量中?

Javascript 如何将聚合结果保存到外部变量中?,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,首先,我正在创建一个带有日历日期选择器的应用程序。您可以选择所需日期的约会。从那以后,一切都很顺利。现在我需要增加每天4次约会的限制。。我正在mongoDB中使用node/express。我使用的是aggregate,它返回日期在数据库中的次数,然后我想将结果保存到一个外部变量中以添加条件。这是我目前的代码: var count; var limit; Date.aggregate( [ { $match: {

首先,我正在创建一个带有日历日期选择器的应用程序。您可以选择所需日期的约会。从那以后,一切都很顺利。现在我需要增加每天4次约会的限制。。我正在mongoDB中使用node/express。我使用的是aggregate,它返回日期在数据库中的次数,然后我想将结果保存到一个外部变量中以添加条件。这是我目前的代码:

var count;
var limit;

Date.aggregate(
    [
        {
            $match:
            {
                "date": "2020-11-20"
            }
        },
        {
            $group:
            {
                _id: null,
                currentOrder: {
                    $sum: 1
                }
            }
        }
    ], (err, res) => {
        count = res;
        if (count === []) {
            console.log('empty')
        } else {

            console.log("This is count : ", count[0].currentOrder)
            limit = count[0].currentOrder
        }
    }
)

console.log('This is limit: ', limit)
console.log('This is count outside of aggregate: ', count)


if (limit === 4) {
    try {
        const savedDate = await disabledDate.save();
        res.json(savedDate)
    } catch (err) {
        res.json({ message: err })
    }
}
因此,在控制台中,我得到:
这是限制:未定义
这是计数:2
这是聚合之外的计数:未定义


所以基本上,我只想使用“计数”结果,使用一个条件来执行某个代码,该代码将禁用该日期。。有什么帮助吗?

我认为应该用异步函数包装聚合,因为“聚合”似乎是异步的

(async function() {
    await Date.aggregate(
    [
        {
            $match:
            {
                "date": "2020-11-20"
            }
        },
        {
            $group:
            {
                _id: null,
                currentOrder: {
                    $sum: 1
                }
            }
        }
    ], (err, res) => {
        count = res;
        if (count === []) {
            console.log('empty')
        } else {

            console.log("This is count : ", count[0].currentOrder)
            limit = count[0].currentOrder
        }
    }
)
  })();

我终于明白了!如果有人有同样的问题,并试图实现我正在做的事情,这就是我所做的:

var count;
var limit;

Date.aggregate(
    [
        {
            $match:
            {
                "date": req.body.date.slice(0, 10)
            }
        },
        {
            $group:
            {
                _id: null,
                currentOrder: {
                    $sum: 1
                }
            }
        }
    ], (err, res) => {
        count = res;
        if (count === []) {
            console.log('empty')
        } else {
            setDate(count[0].currentOrder)
            console.log("This is count : ", count[0].currentOrder)
            limit = count[0].currentOrder
        }
    }
)

async function setDate(limit) {
    if (limit >= 4) {
        try {
            const savedDate = await disabledDate.save();
            res.json(savedDate)
        } catch (err) {
            res.json({ message: err })
        }
    }
}

我创建了一个异步函数来处理更改,然后我在回调中调用了它,它成功了

谢谢你的帮助!它不起作用,但你让我找到了正确的答案:)