我正在尝试将一堆数组插入到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(){ });
然后我需要遍历places对象并添加每个项目:
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');
}
});
}
在这里,我需要密钥才能成为实际的密钥:'city','country'。而不是字面意义上的“关键”。但我不知道如何使用修饰符来实现这一目标。
答案 0 :(得分:2)
您需要以编程方式构建$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');
}
});