gpt4 book ai didi

node.js - Mongoose ,从数组中删除一个对象并更新其他对象

转载 作者:可可西里 更新时间:2023-11-01 10:40:08 26 4
gpt4 key购买 nike

我是一名网络开发新手,我正在尝试构建一个简单的可编辑图片库。我有一个收藏模式和一个绘画模式:

var collectionSchema = new mongoose.Schema({
name: String,
paintings: [
{
type: Schema.Types.ObjectId,
ref: "Painting"
}
]
})

&&

var paintingSchema = new mongoose.Schema({
img: String,
description: String,
index: Number,
parent: String
});

我目前正在尝试添加一条销毁路线,该路线将从一个收藏中删除一幅画。到目前为止我有这个:

app.delete("paintings/:type/:index", function(req,res){
var type = req.params.type;
var index = req.params.index;
Painting.findOneAndRemove({parent:type,index:index},function(err,removedPainting){
if(err){
console.log(err);
} else{
res.redirect("/paintings/"+type);
}
});
});

但是,我还需要索引高于已删除对象的对象的所有“索引”属性在对象被删除后减一。知道什么是最好的方法吗?

我试过:

  1. 将销毁路由更改为更新路由,然后将集合中的绘画数组完全替换为更新版本,但这似乎不起作用——我认为是因为集合中的数组schema 其实不是对象数组,而是 ObjectId 数组?

  2. 重定向(从销毁路线的末端)到更新路线,该路线循环通过 Paintings.find({parent: type}) 找到的绘画并增加它们的 ID,但我从未真正测试过这个,因为当我尝试从 destroy 路由重定向时,我总是会收到错误消息:“cannot GET paintings/:type/:index/delete”,即使我已将路由设为 put 请求,而不是 get 请求。

有什么想法吗?任何事情都将不胜感激,我显然在这里的黑暗中摸索着。非常感谢!

最佳答案

通过消除 Painting 模式的索引属性并完全消除 Painting 模式来修复此问题,以便所有绘画仅作为 Collections 中的一个对象存在:

var collectionSchema = new mongoose.Schema({
name: String,
paintings: [
{
img: String,
description: String,
parent: String
}
]
})

然后,我更改了我的 delete 路由,使其实际上是一个 put 路由,它从 Collection 的绘画数组中提取了正确的绘画:

//DESTROY
app.put("paintings/:type/:index/delete", middleware.isLoggedIn, function(req,res){
var type = req.params.type;
var index = req.params.index;
Collection.findOne({name:type},function(err,collection){
if(err){
console.log(err);
} else{
var idOfRemove = collection.paintings[index]._id;
Collection.findOneAndUpdate({name:type},{$pull:{ paintings:{ _id: idOfRemove}}}, function(err,removedPainting){
if(err){
console.log(err);
} else{
res.redirect("/paintings/"+type);
}
})
}
})
});

关于node.js - Mongoose ,从数组中删除一个对象并更新其他对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com