如何在mongodb中创builddynamic文档键

我的问题包括创build一个dynamic字段和应该由用户input的未定义名称的集合。 所以我尝试使用variables,但它不工作。

这是代码

insertData_dynamic_colone : function(collection) { var colone1 = "prod"; var colone2 = "prod2"; dbObject.collection(collection).insertOne({ colone1 : "14", colone2 : "15" }, function(err, result) { assert.equal(err, null); }); }, 

所以在我得到的数据库

 > db.colone_dynamic.find() { "_id" : ObjectId("579af3c4f41e03f0362a5170"), "colone1" : "14", "colone2" : "15" } 

但我期待得到

 > db.colone_dynamic.find() { "_id" : ObjectId("579af3c4f41e03f0362a5170"), "prod" : "14", "prod2" : "15" } 

使用括号表示dynamic地构造文档。 您需要先创build一个空对象来保存键,然后使用括号表示将dynamic字段添加到对象:

 insertData_dynamic_colone: function(collection, colone1, colone2) { var obj = {}; obj[colone1] = "14"; obj[colone2] = "15"; dbObject.collection(collection).insertOne(obj, function(err, result) { assert.equal(err, null); }); } 

要么

 insertData_dynamic_colone: function(collection) { var obj = {}, colone1 = "prod", colone2 = "prod2"; obj[colone1] = "14"; // bracket notation obj[colone2] = "15"; dbObject.collection(collection).insertOne(obj, function(err, result) { assert.equal(err, null); }); } 

或者,您可以使用ES2015 Object initializer语法(正如@ xmikex83在注释中指出的那样):

 insertData_dynamic_colone: function(collection) { var colone1 = "prod"; var colone2 = "prod2"; dbObject.collection(collection).insertOne({ [colone1] : "14", // Computed property names (ES6) [colone2] : "15" }, function(err, result) { assert.equal(err, null); }); } 

尝试:

 insertData_dynamic_colone: function(collection) { var data = { colone1: "prod", colone2: "prod2" }; dbObject.collection(collection).insertOne(data, function(err, result) { assert.equal(err, null); }); }, 

你要插入dynamic形成的文档。不是真的dynamic索引权。 你可以使用下面的来实现你想要的。

 insertData_dynamic_colone : function(collection) { var colone1 = "prod"; var colone2 = "prod2"; var insertObj = {}; insertObj[colone1] = "14"; insertObj[colone2] = "15"; dbObject.collection(collection).insertOne(insertObj, function(err, result) { assert.equal(err, null); }); },