在variablesmongo db中使用variables作为键名

我正试图插入一堆数组到mongoDB中。

数据看起来像这样:

var places = { city: ['london', 'york', 'liverpool'], country: ['uk', 'france'] }; 

每次我添加一个数组,一些条目可能已经在那里,所以我想确保没有重复。

 db.collection('places').ensureIndex({'city': 1}, {unique: true }, function(){ }); db.collection('places').ensureIndex({'country': 1}, {unique: true }, function(){ }); 

然后,我需要通过位置对象循环,并添加每个项目:

 for(var key in places){ db.collection('places').update({_id: 1}, { $addToSet: { key: { $each places[key] } } }, function(err, docs){ if(err){ console.log(err); }else{ console.log('success'); } }); } 

在这里,我需要钥匙才能成为真正的钥匙:“城市”,“国家”。 而不是字面上的“关键”。 但我不知道如何使用修改器来实现这一点。

您需要以编程方式构build您的$addToSet值:

 for(var key in places){ var addToSet = {}; addToSet[key] = { $each: places[key] }; db.collection('places').update({_id: 1}, {$addToSet: addToSet}, function(err, docs){ if(err){ console.log(err); }else{ console.log('success'); } }); } 

但是,您可以通过将两个更新合并为一个更有效地做到这一点:

 var addToSet = {}; for(var key in places){ addToSet[key] = { $each: places[key] }; } db.collection('places').update({_id: 1}, {$addToSet: addToSet}, function(err, docs){ if(err){ console.log(err); }else{ console.log('success'); } });