我的问题在于创建一个包含动态字段和未定义名称的集合,应由用户输入。所以我尝试使用变量来做它,但它不起作用。
这是代码
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" }
答案 0 :(得分:1)
尝试:
insertData_dynamic_colone: function(collection) {
var data = {
colone1: "prod",
colone2: "prod2"
};
dbObject.collection(collection).insertOne(data, function(err, result) {
assert.equal(err, null);
});
},
答案 1 :(得分:1)
使用bracket notation动态构建文档。您需要先创建一个空对象来保存键,然后使用括号表示法将动态字段添加到对象中:
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);
});
}
答案 2 :(得分:1)
你想插入动态形成的文件。没有真正动态索引的权利。您可以使用以下内容来实现您的目标。
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);
});
},