有没有办法在node-mongodb本机驱动程序中使用动态键?我的意思是让一个变量持有密钥,而不是直接使用密钥。
当一个人通常这样做的时候:
db.createCollection('col', function(err, col){
col.insert({'_id':'wak3ajakar00'});
}为此,请执行以下操作:
db.createCollection('col', function(err, col){
var ID = '_id';
col.insert({ID:'wak3ajakar00'});
}当我运行后一段代码时,我在集合db.col中得到了一个文档,除了一个标准创建的_id之外,还有一个名为ID的键,而不仅仅是一个值为wak3ajakar00的键_id。这让我相信实际上不可能直接做到这一点。
相反,我现在只是创建我想要提前插入的文档,如下所示:
db.createCollection('col', function(err, col){
var ID = 'wak3ajakar00';
var key = '_id';
insertion = {}
insertion[key] = ID;
col.insert(insertion);
}这就像我想要的那样工作,但我只是想知道是否有更好的方法。JavaScript、NodeJS和MongoDB对我来说都是新的,所以我觉得我很容易遗漏一些东西。如果没有,有没有更干净的方法用JavaScript编写上面的代码呢?
最好的,谢谢,
萨米语
发布于 2011-08-13 07:10:02
2020编辑:现在可以通过几种方便的新方法创建对象文字:
现在,您可以通过将变量括在方括号中,将其用作对象文本中的属性名称:
const ID = "_id";
col.insert({ [ID]: "wak3ajakar00" });在对象文字中,可以使用变量名作为属性名,使用变量值作为属性值,如下所示:
const _id = "wak3ajakar00";
col.insert({ _id });2011年的原始答案:
在object文本语法中,不能将变量用作键名,只能将值用作键名。要做到这一点,就像你已经发现的那样--首先创建你的对象,然后使用方括号符号将属性作为一个单独的步骤添加。
var obj = {};
var ID = "_id";
obj[ID] = "wak3ajakar00";发布于 2013-04-11 22:00:01
您可以编写一个小函数来创建这样的对象
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是否是一个好主意。
https://stackoverflow.com/questions/7047209
复制相似问题