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

または、あなたすることができます(コメントで@ xmikex83で指摘したように)ES2015 Object initializerの構文を使用します。

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

をあなたはdocumを挿入したいですダイナミックに形成されています。あなたはあなたが望むものを達成するために次のものを使うことができます。

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);   
    }); 
}, 
関連する問題