【问题标题】:variable with mongodb dotnotation带有 mongodb 点符号的变量
【发布时间】:2011-10-05 20:35:03
【问题描述】:

我想将 mongodb 文档内的 object 对象内的字段增加 1。

  var stuffID = 5
  collection.update({
    "id": id,
  },
  {
    '$inc': {
      'stuff.stuffID': 1
    }
  },
  function(err, doc) {
    res.end('done');
  });

我需要将该 stuffID 设为变量。有什么办法吗?谢谢。

如果有帮助,这将使用 node-mongodb-native。

如果你投票结束,你能解释一下你不明白的地方吗?

【问题讨论】:

  • 在什么意义上你想“使那个 stuffID 成为一个变量”?
  • @cwb 就像 stuffID 实际上是一个不同的值而不是字符串 stuffID。

标签: javascript mongodb node.js


【解决方案1】:

您需要单独创建可变键对象,因为 ES2015 之前的 JS 不允许在对象字面量语法中使用除常量字符串以外的任何内容:

var stuffID = 5
var stuff = {};                 // create an empty object
stuff['stuff.' + stuffID] = 1;  // and then populate the variable key

collection.update({
    "id": id,
}, {
    "$inc": stuff               // pass the object from above here
}, ...);

EDIT 在 ES2015 中,现在可以使用表达式作为对象文字中的键,使用 [expr]: value 语法,在这种情况下还可以使用 ES2015 反引号字符串插值:

var stuffID = 5;
collection.update({
    "id": id,
}, {
    "$inc": {
        [`stuff.${stuffID}`]: 1
    }
}, ...);

以上代码适用于 Node.js v4+

【讨论】:

    【解决方案2】:

    将变量放在表示 stuffID 的位置。

    'stuff.' + varname: 1
    

    【讨论】:

    • ` '东西。 + stuffID: 1 ^ module.js:301 抛出错误; ^ SyntaxError: Unexpected token + `
    • 我认为您不能在键中加上 + 号?
    • 然后放上'东西'。在变量中,你不必连接。
    • 问题就在这里,变量将被解释为字段名称,您最终会在文档中得到 varname : 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2016-09-27
    • 2021-05-13
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多