在带有修饰符的 mongo db 中使用变量作为键名
use variable as key name in mongo db with modifier
我正在尝试将一堆数组插入 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'。而不是字面上的 'key'。但我看不出如何使用适当的修饰符来实现这一点。
您需要以编程方式建立您的 $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');
}
});
我正在尝试将一堆数组插入 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'。而不是字面上的 'key'。但我看不出如何使用适当的修饰符来实现这一点。
您需要以编程方式建立您的 $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');
}
});