有没有办法使用node-mongodb-native的动态密钥?

时间:2011-08-12 23:02:03

标签: javascript mongodb node.js

有没有办法在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的密钥,而不是一个密钥{{ 1}},其值为_id。这让我相信实际上不可能直接这样做。

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

wak3ajakar00

这与我想要的完全一样,但我只是想知道是否有更好的方法来解决这个问题。 JavaScript,NodeJS和MongoDB对我来说都是新手,所以我觉得我很容易丢失一些东西。如果没有,有没有更简洁的方法在JavaScript中编写上述代码?

最好,谢谢,萨米

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分: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 是否是一个好主意。