mongodb更新大型集合数组中的对象

时间:2018-04-05 19:52:17

标签: mongodb mongoose multilingual

说我想一键更新数以千计的mongodb模型,我会遇到意想不到的问题吗?一旦有第三种语言添加到webapp,我们的想法就是更新所有条目。

型号:

JobSchema = new mongoose.Schema({
    info:{ 
        instruments:[{
            index:String,
            de:String,
            en:String,
        }],
    },
});

自定义更新(数千条结果):

Job.find({}, function(err, foundJobs){
     //no error handling for the sake of simplicity
     foundJobs.forEach(function(job){
         job.info.instruments.forEach(function(instr, index){
             instr.en = 'FOO'
         })    
     })
})

我知道更好的想法是创建一个额外的“乐器”模型,但后来我无法搜索包含某些乐器的JobModels ......至少我找不到一个好方法......

1 个答案:

答案 0 :(得分:0)

试试这个......

Job.updateMany({}, 
    { $set: { instruments.$.en: 'FOO' }, (err, result) => {
     if (err) {
         next(err);
     } else {
         res.status(200).json(result);
     }
});
  

我知道更好的想法是创建一个额外的“乐器”模型,但后来我无法搜索包含某些乐器的JobModels ......至少我找不到一个好方法......

你可以通过Id搜索Job中的引用数组。

JobSchema = new mongoose.Schema({
    info:{ 
        instruments: [{type: mongoose.Schema.Types.ObjectId, ref: 'Instrument'}],
    }
});

InstrumentSchema = new mongoose.Schema({
        index:String,
        de:String,
        en:String
});

// assuming instrumentIDs is an array containing instrument object IDs.
JobSchema.find({ info.instruments: {$all : instrumentIDs } })
imho,如果您所描述的更新在满月时发生过一次,则不值得对其进行规范化。