如何使用Node.JS将$ inc运算符用于MongoDB中的变量

苛刻

我正在尝试使用我网站的Node.JS后端在mongoDb中构建“访问者数量”集合。前端将以下信息作为JSON发送到Node.JS后端。

  1. isUniqueVisitor-如果是,则为1,否则,则为0
  2. 国家/地区-标准国家/地区代码-“ JP”,“ IN”,“ UK”等

我的数据库如下所示

{
    "today": 2019-06-07,
    "uniqueVisitors": {
        "count": 230,
        "countries": {
            "JP": 102,
            "IN": 88,
            "UK": 30
        }
    }
}

如果我使用具有固定值的$ inc,则效果很好

Eg. $inc: {count: 1}  // for string/integers keys
Eg. $inc: {"uniqueVisitors.count": 1} // inside quotes to access key of a JSON

主要问题: 我无法使用变量访问文档名称。

Eg. $inc: {`uniqueVisitors.countries[${req.body.country}]`}

由于反引号不能用于Mongo,因此会产生错误。我尝试过

Eg. $inc: {uniqueVisitors["countries"][req.body.country]}

但是即使这样也会产生错误。

我在网上跟踪发现,可以通过将所需的JSON直接传递给$ set来实现使用变量的mongo $ set。因此,我采取以下方式编写代码。

 mongoClient.connect(mongoURL, async function (err, db) {
        if (err) throw err;
        console.log("Database connected");

            // Identifying my document with today's date
            var myQuery = {
                date: getTodayDate()
            };

            // Defining the JSON to be passed to uniqueVisitors $inc
            var uniqueVisitorsInc = {
                "uniqueVisitors": {
                    "count": 0,
                    "countries": {}
                }
            };

            // Populating the JSON to be passed to uniqueVisitors $inc => essentially asking to increase count by 1 and increase that country's count by 1

            uniqueVisitorsInc["uniqueVisitors"]["count"] = 1;
            uniqueVisitorsInc["uniqueVisitors"]["countries"][myData.country] = 1;

            var newValues = {
                $inc: uniqueVisitorsInc
            };
            await db.collection("visitorStats").update(myQuery, newValues, {upsert: true});
            db.close();
    });

上面的方法在编辑器上效果很好,但是引发了以下运行时错误:

$inc requires numerical values

基本上是让我以{var1:1,var2:5}模式将值传递给$ inc。

请帮助我绕过这种奇怪的情况。

我知道我可以执行两步过程,首先读取值,在变量中递增,在Mongo中$ set。

但是有人知道如何使用$ inc克服这种情况吗?

姆德雷科

如果此更新被硬编码为仅更新“ JP”,则它的外观应为:

$inc: { "uniqueVisitors.country.JP": 1 }

因此,您几乎可以使用backtick方法,但需要稍微更改语法并保留: 1部分,如下所示:

$inc: { [`uniqueVisitors.country.${req.body.country}`]: 1 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Ruby将运算符存储在变量中

C ++中的运算符:如何使用C ++中的运算符将内部对象中的变量值分配给int变量

如何使用wasm中的<>运算符评估js值?

在[r]中缺少值的数据中,如何使用多个关系运算符将值分配给新变量?

React.js问题:如何使用三元运算符将多个类应用于组件?

如何重载Delphi中的Inc(Dec)运算符?

MongoDB C# 驱动程序:如何将 $in 运算符用于嵌套的嵌入式文档?

在php中,如何在不执行增量操作的情况下将增量运算符与变量结合使用?

如何使用非标准运算符将字符向量的元素用作函数的符号自变量:=运算符

使用 C++ 中的点运算符将枚举变量添加到结构变量中很困难?

如何使用node.js将数组插入mongodb

Node.js中的<!-运算符是什么?

node.js中的奇怪&&运算符行为

Node.js中的三元运算符

Mongodb 聚合在终端中运行,但在使用 mongoose 在 node.js 中运行时,它返回“APIError:参数必须是聚合管道运算符”

如何将Laravel中的运算符与结果联接?

如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符

如何将 PostgreSQL 查询结果传递给 Airflow 中的变量?(Postgres 运算符或 Postgres Hook)

如何将科学运算符E与变量一起使用?

逗号运算符如何在js中工作?

JS中的价差/余数运算符如何工作?

如何将结构的成员用于算术运算符(将变量add,sub,mul,div添加到struct成员)

使用“或”运算符选择 cytoscape.js 中的元素

在MongoDB中,如何在find()中使用等效于$ out的运算符将数据复制到另一个集合中?

PHP运算符如何将变量与其他变量相乘

在C中,如何轻松区分将*用作指针,*用作解除引用运算符,*用作乘法运算符?

如何使运算符变量?

将运算符分配给python中的变量?

将数学运算符存储在变量中