【问题标题】:Is there any way to use a dynamic key with node-mongodb-native?有没有办法在 node-mongodb-native 中使用动态密钥?
【发布时间】:2011-08-12 23:02:03
【问题描述】:

有没有办法在 node-mongodb-native 驱动程序中使用动态键?我的意思是让一个变量保存密钥而不是直接使用密钥。

就像人们通常会这样做:

db.createCollection('col', function(err, col){
    col.insert({'_id':'wak3ajakar00'});
}

改为这样做:

db.createCollection('col', function(err, col){
    var ID = '_id';
    col.insert({ID:'wak3ajakar00'});
}

当我运行后一个代码时,除了标准创建的 _id 之外,我最终会在集合 db.col 中得到一个文档,其中包含一个名为 ID 的键,而不是一个具有值的键 _id wak3ajakar00。这让我相信实际上不可能直接做到这一点。

相反,我现在只是创建要提前插入的文档,如下所示:

db.createCollection('col', function(err, col){
    var ID = 'wak3ajakar00';
    var key = '_id';
    insertion = {}
    insertion[key] = ID;
    col.insert(insertion);
}

这完全符合我的要求,但我只是想知道是否有更好的方法来解决这个问题。 JavaScript、NodeJS 和 MongoDB 对我来说都是新的,所以我觉得我很容易遗漏一些东西。如果没有,有没有更简洁的方法可以用 JavaScript 编写上述代码?

最好的,谢谢,
萨米

【问题讨论】:

标签: javascript mongodb node.js


【解决方案1】:

2020 年编辑:现在可以通过几种方便的新方式创建对象字面量:

您现在可以将变量用方括号括起来,作为对象文字中的属性名称:

const ID = "_id";
col.insert({ [ID]: "wak3ajakar00" });

你可以使用变量名作为属性名,变量值作为对象字面量中的属性值,如下所示:

const _id = "wak3ajakar00";
col.insert({ _id });

2011 年的原始答案:

在对象字面量语法中,不能使用变量作为键名,只能使用值。执行此操作的方法是您已经发现的方法 - 首先创建您的对象,然后使用方括号表示法将属性添加为单独的步骤。

var obj = {};
var ID = "_id";
obj[ID] = "wak3ajakar00";

【讨论】:

    【解决方案2】:

    你可以写一个小函数来创建这样一个对象

    var obj = function(key, value, obj) {
      obj = obj || {};
      obj[key] = value;
      return obj;
    }
    
    // Usage
    foo = obj('foo' + 'bar', 'baz');
    // -> {'foobar': 'baz'}
    
    foo = obj('stack' + 'over', 'flow', foo);
    // -> {'foobar': 'baz', 'stackover': 'flow'}
    

    不知道调用这个函数obj好不好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 2017-08-23
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2013-01-14
      相关资源
      最近更新 更多