如何在mongodb中创建动态文档密钥

时间:2016-07-29 07:10:34

标签: javascript json node.js mongodb

我的问题在于创建一个包含动态字段和未定义名称的集合,应由用户输入。所以我尝试使用变量来做它,但它不起作用。

这是代码

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" }

3 个答案:

答案 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);         
    });
}, 
相关问题