猫鼬替换数组

时间:2020-05-13 16:35:35

标签: javascript node.js mongoose mongoose-schema

所以我目前正在尝试替换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}
});

我不想将数组弹出为空然后读取新元素,是否有更优雅的方法?

2 个答案:

答案 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是否有效