2016-07-29 75 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);   
    }); 
},