所以我目前正在尝试替换Element中的数组。
oldEvent.interests = ["test", "test2"];
console.log(oldEvent);
,但console.log中的“我的元素”未更改。 oldEvent.interests是一个空数组,在日志中仍然是空。
我的模型如下:
const eventSchema = new mongoose.Schema({
title: {
type: String, required: true, minlength: 2, maxlength: 128,
validate: {
validator: v => /^[\w\d öäüÖÄÜ]*$/.test(v),
message: props => `"${props.value}" may only consist of normal letters and numbers`
},
},
date: {type: Date, required: true},
description: {type: String, required: true, maxlength: 999},
maxParticipants: {type: Number, min: 0},
participants: [{type: mongoose.Schema.Types.ObjectId, ref: "User"}],
joinDeadline: {type: Date, required: true},
interests: {
type: [{type: mongoose.Schema.Types.ObjectId, ref: "Interest"}],
validate: {
validator: v => v.length <= 10,
message: props => `"${props.value}" may only consist of up to 10 interests`
},
},
host: {type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true},
location: {type: geoSchema}
});
我不想将数组弹出为空然后读取新元素,是否有更优雅的方法?
答案 0 :(得分:2)
如果有猫鼬文档,则可以使用document.set()
修改属性。这将修改您的文档的本地副本。
然后,您将必须调用document.save()
来更新数据库中的数据。
请注意,您设置的内容必须与您的架构匹配,否则猫鼬不会更新您的文档。
您可以的话
oldEvent.set("interest", [id1, id2])
...
await oldEvent.save()
或
oldEvent.set({ interest: [id1, id2] })
...
await oldEvent.save()
答案 1 :(得分:0)
由于兴趣是由ObjectID组成的,因此Mongoose似乎在尝试替换它时已经在检查数组的元素。 因此,使用无效对象ID进行的测试不会更改数组。
// Won't work
oldEvent.interests = ["asdflkashjk"];
// Works
oldEvent.interests = ["5eb40a55125a8e356c3bc716"];
实际上哪个很好,因为我主要的验证问题是检查ID是否有效