2016-07-29 76 views
1

我的问题包括创建动态域和未定义的名称应当由用户输入的集合创建动态文件的密钥。所以我尝试使用变量做它,但它不工作。如何在MongoDB中

这是在数据库上我收到

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

代码

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"), "prod" : "14", "prod2" : "15" } 
+0

如果你正在使用的模式不太方法,那么你可以直接给任何名称字段名 – chirag

回答

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);   
    }); 
} 
+1

或者,你可以使用[ES2015对象初始](https://developer.mozilla.org/it/docs/ Web/JavaScript/Reference/Operators/Object_initializer)语法。 [This](http://jsfiddle.net/ryansukale/wd4hdee2/)就是一个简单的例子。 – xmikex83

+0

@ xmikex83谢谢你指出。 – chridam

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

要插入解决的文它们是动态形成的。不是真正的动态索引权。你可以使用以下来实现你想要的。

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);   
    }); 
},