无法将修改后的对象保存回MongoDB数据库问题求助
问题解决:MongoDB中向数组添加ID后save失败
我通过Object Id找到Group对象,向它的arrayOfPlacemarkIds数组添加新ID的步骤能正常执行,但调用group.save()保存回MongoDB时返回错误。
业务逻辑代码
addPlacemarkToGroup: { handler: async function (request, h) { const loggedInUser = request.auth.credentials; const user = await db.userStore.getUserById(loggedInUser._id); const placemark = await db.placemarkStore.getPlacemarkById(request.payload.placemarkId); const group = await db.groupStore.getGroupById(request.payload.groupId); console.log(group); group.arrayOfPlacemarkIds.push(placemark._id); await group.save(); console.log(group); return h.redirect("/dashboard"); }, },
Schema定义
import Mongoose from "mongoose"; import { User } from "./user.js"; import { Placemark } from "./placemark.js"; const { Schema } = Mongoose; const groupSchema = new Schema({ title: String, userId: { type: Schema.Types.ObjectId, ref: "User", }, arrayOfPlacemarkIds: [{type: [Schema.Types.ObjectId], ref:"Placemark"}] }); export const Group = Mongoose.model("Group", groupSchema);
问题原因与修复
报错的核心原因是**arrayOfPlacemarkIds的Schema定义错误**——你把它定义成了「数组的数组」:[{type: [Schema.Types.ObjectId], ref:"Placemark"}],这意味着每个数组元素本身又是一个ObjectId数组,和你实际要存储单个Placemark ID的需求不匹配。
修改Schema定义为普通的ObjectId数组即可:
arrayOfPlacemarkIds: [{ type: Schema.Types.ObjectId, ref:"Placemark" }]
修改后重新运行代码,group.save()就能正常执行。
另外,也可以直接用Mongoose的$push操作符在数据库层面完成更新,省去先查询再保存的步骤,效率更高:
// 替换原有的查询+push+save逻辑 await db.groupStore.updateOne( { _id: request.payload.groupId }, { $push: { arrayOfPlacemarkIds: placemark._id } } );
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

