我有这个架构:
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});
谢谢
答案 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')
}