findOneReplace替换问题



我想在数据库中找到一个文档,并将其替换为具有新名称和新密钥的文档。

这是我的模式

const Schema = mongoose.Schema;
const vampireSchema = new Schema({
name: { type: String, required: true },
title: String,
hair_color: {type: String, default: "blonde" },
eye_color: String,
dob: Date,
loves: [String],
location: String,
gender: String,
victims: {type: Number, min: 0}
});
const Vampire = mongoose.model("Vampire", vampireSchema);
module.exports = Vampire;

这是我的可执行代码

Vampire.findOneAndReplace( { name: "Claudia" }, { name: "Eve", portrayed_by: "Tilda Swinton" }, (err, vamp) => {
if(err){
console.log(err)
}
else{
console.log(vamp)
}
db.close()
})

我可以看到两个问题。

首先,您应该在findOneAndReplace调用中传递null作为第三个参数。这将把选项设置为null,并且应该让代码运行。在我看来,这是猫鼬的一种奇怪行为。

Vampire.findOneAndReplace( 
{ name: "Claudia" }, 
{ name: "Eve", portrayed_by: "Tilda Swinton" }, 
null, 
(err, vamp) => 
{
if(err){
console.log(err)
}
else{
console.log(vamp)
}
db.close()
})

其次,我建议将grated_by添加到模式中,否则,该字段将不会出现在新创建的文档中。因此,我会这样调整你的模式:

const vampireSchema = new Schema({
name: { type: String, required: true },
title: String,
hair_color: {type: String, default: "blonde" },
eye_color: String,
dob: Date,
loves: [String],
location: String,
gender: String,
victims: {type: Number, min: 0},
portrayed_by: String
});

最新更新