有没有办法使用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是个好主意。