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

有没有办法使用node-mongodb-native驱动程序的dynamic密钥? 通过这个我的意思是有一个variables持有的关键,而不是直接使用密钥。

正如在通常情况下这样做的时候:

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

改为这样做:

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

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

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

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

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

最好的,谢谢,
萨米

在对象字面值语法中,不能使用variables作为键名称,只能使用值。 做到这一点的方式是你已经发现的方式 – 首先创build你的对象,然后使用方括号表示法作为单独的步骤添加属性。

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

你可以编写一个创build这样一个对象的小函数

 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是个好主意。