猫鼬不更新空字段

时间:2021-03-24 10:48:02

标签: node.js mongodb mongoose

我有这个架构:

const collaboratoreschema =new schema({
//_id:schema.Types.ObjectId,
dataregistrazione:{type:Date,default:Date.now,immutable:true},
nominativo:nominativoschema,
localitanascita:{type:String,required:true,trim:true},
provincianascita:{type:String,required:true,trim:true},
datanascita:{type:Date,required:true},
indirizzoresidenza:{type:indirizzoEmbeddedSchema,required:true},
indirizzodomicilio:{type:indirizzoEmbeddedSchema},
telefoni:{type:[telefonoschema],required:true},
indirizziemail:{type:[require('../email.schema.js')],default:undefined},
codicefiscale:{type:String,required:true,uppercase:true,trim:true,match:/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/},
note:{type:String,trim:true},
immagine:{type:imageEmbeddedSchema,set:v=>!v || Object.keys(v).length===0?undefined:v},
documenti:{type:[{type:schema.Types.ObjectId,ref:'tbFiles'}],set:v=>!v || Object.keys(v).length===0?undefined:v},
datainiziorapporto:{type:Date,required:true},
datafinerapporto:Date,
riferimentoazienda:{type:schema.Types.ObjectId,ref:'tbFornitori',set:v=>!v || v==={} || v===''?undefined:v},
attivo:{type:Boolean,default:true},
},{timestamps:true,useNestedStrict: true, omitUndefined:true,collection:'tbCollaboratori'})

保存工作正常,但更新时出现问题。例如,将note字段值设置为空,当我用await collaboratore.findByIdAndUpdate({_id:id},employ,{new:true,upsert:true});保存更改时,不保存更改,而如果我将值更改为非空值,它工作正常。 我希望删除空字段和未定义字段。

更新

这是我要更新的控制器:

let employ=new collaboratore(); // collaboratore is my model
collaboratoreschema.eachPath(d=>{
    employ[d]=c[d]; //c is collaboratore from req.body
})
await collaboratore.findByIdAndUpdate({_id:id},employ,{new:true,upsert:true});

谢谢

1 个答案:

答案 0 :(得分:0)

刚试过。如果您可以使用以下脚本进行重现,请告诉我它对我来说工作正常。

6.js

const mongoose = require('mongoose');

let UserSchema = new mongoose.Schema({
    email: {
        type: String,
    },
});


run().catch((err) => console.log(err));

async function run() {
    await mongoose.connect('mongodb://localhost:27017/test', {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    });
    await mongoose.connection.dropDatabase();

    const UserModel = mongoose.model('user', UserSchema);
    const newUser = { email: 'test@test.com' };
    const user = new UserModel(newUser);
    const {_id} = await user.save();
    const updatedUser = await UserModel.findOneAndUpdate({_id}, {$set: {email: ''}}, {new: true, upsert: true});
    console.log(updatedUser, 'updatedUser')
}