【问题标题】:Javascript variable name coercion to stringJavascript变量名强制转换为字符串
【发布时间】:2014-06-18 00:38:18
【问题描述】:

我正在尝试使用传入的字符串变量更新 mongo 中的数据库。但是,Javascript 会自动强制变量类型,并在数据库中创建一个“类型”键,而不是字符串类型指向的内容(让我们例如说“通知”)

"update_notifications": function (id ,type ,callback) {
  db.collection("backend_users", function(err, collection) {
    collection.update(
      {"_id": new mongodb.ObjectID(id)},
      { $bit: { type : { xor: 1 } } },
      function (err) {
        if (err) { console.log(color.red(err)); }
        callback(err);
      }
    );
  });
},

是否有强制 mongo 使用“通知”而不是创建新的“类型”键?谢谢!

【问题讨论】:

  • 您的type 变量位于对象表示法的“左”或“键”一侧,因此它必须是对“键”有效的字符串。这也是 MongoDB 通过为“键”分配值来工作的方式。您实际上要更新数据中的哪个字段?听起来您需要用parseInt 包装type
  • 我正在更新的字段是“通知”,并且类型也作为“通知”传入。当我在第 6 行将类型更改为“通知”时,代码运行。

标签: javascript mongodb coercion


【解决方案1】:

你基本上想在这样的语句之外构造你的“更新”对象

"update_notifications": function (id ,type ,callback) {
    var update = { "$bit": { } };
    update["$bit"][type] = { xor: 1 };

  db.collection("backend_users", function(err, collection) {
    collection.update(
      {"_id": new mongodb.ObjectID(id)},
      update,
      function (err) {
        if (err) { console.log(color.red(err)); }
        callback(err);
      }
    );
  });
},

“左侧”始终被视为对象表示法中的字符串文字,但您可以按所示方式分配

【讨论】:

  • 对不起,我不够清楚-类型可以是我文档中的各种不同字段,其中之一是“通知”
  • @svoges 现在明白你的意思了。这在对象表示法中很常见。
猜你喜欢
  • 1970-01-01
  • 2014-05-01
  • 2021-03-13
  • 2019-09-22
  • 2011-08-02
  • 1970-01-01
  • 2011-08-27
  • 2010-12-04
相关资源
最近更新 更多