我有兩個模型 user 和 places 。兩個模型都互相參考。我正在嘗試填充 place 模型,以便當我洗掉 place 時,該位置會從 places 以及用戶模型的 places 陣列中洗掉。Place from Place 模型已成功洗掉,但為什么它沒有從用戶模型的 places 陣列中洗掉。我究竟做錯了什么 ?
我的代碼:
放置模型
const mongoose = require("mongoose");
const schema = mongoose.Schema;
const placeSchema = new schema({
title : {type :String , required :true} ,
description : {type :String , required :true} ,
image : {type :String , required :true} ,
address : {type :String , required :true} ,
location : {
lat: {type : Number , required : true} ,
lng : {type :Number , required : true}
} ,
creator : {type :mongoose.Types.ObjectId , required :true , ref :"User"}
});
module.exports = mongoose.model("Place" , placeSchema);
用戶模型
const mongoose = require("mongoose");
const uniqueValidator = require("mongoose-unique-validator");
const schema = mongoose.Schema;
const userSchema = new schema({
userName : {type : String , required : true} ,
email : {type : String , required : true , unique:true} ,
password : {type : String , required : true , minlength:6} ,
image :{type : String , required : true} ,
places : [{type : mongoose.Types.ObjectId , required : true , ref : "Place"}]
});
userSchema.plugin(uniqueValidator);
module.exports = mongoose.model("User" , userSchema);
用于洗掉地點以及從用戶模型的地點陣列中洗掉地點的 api
const deletePlace=async(req, res , next)=>{
const placeId = req.params.pid;
let place ;
try
{
place = await PLACE.findById(placeId).populate('creator');
}
catch(err)
{
const error = new Error("SOMETHING WENT WRONG , COULD NOT DELETE PLACE");
error.code = 500;
return next(error);
}
if(!place)
{
const error = new Error("NO PLACE FOUND WITH SUCH ID");
error.code = 500;
return next(error);
}
try
{
const session = await mongoose.startSession();
session.startTransaction();
await PLACE.deleteOne({placeId});
place.creator.places.pull(place);
}
catch(err)
{
const error = new Error("SOMETHING WENT WRONG , COULD NOT DELETE PLACE");
error.code = 500;
return next(error);
}
res.status(200).json({message: "PLACE DELETED"});
};
uj5u.com熱心網友回復:
更改創建者物件后,您需要保存它:
place.creator.places.pull(place);
await place.creator.save();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/495728.html
上一篇:MongoDB-更新所有地圖值
