mongoose,从数组中删除一个对象,并更新其他对象

我是一个Web开发新手,我正在尝试构build一个简单的可编辑图像库。 我有一个Collections模式和一个绘画模式:

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。 任何想法是什么最好的办法做到这一点?

我努力了:

  1. 改变销毁路线到一个更新路线,然后只是完全取代集合内的绘画数组更新版本,但这似乎并没有工作 – 我认为,因为集合架构内的数组实际上不是一个数组的对象,但一个ObjectIds的数组?

  2. redirect(从摧毁路线的末端)到一个更新路线,它循环通过Paintings.find({parent:type})find的绘画并递增它们的ID,但是我从来没有真正地去testing这个,因为当我尝试redirect摧毁路线,我总是会得到错误:“不能GET绘画/:types/:索引/删除”即使我已经做出了放置请求,而不是一个请求的路线。

有任何想法吗? 任何事情都会非常感激,我显然在这里黑暗中摸索。 万分感谢!

通过消除绘画模式的索引属性,并完全消除绘画模式,从而使所有绘画仅在作品集内存在一个对象来解决这个问题:

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

然后,我改变了我的删除路线,以便它实际上是一个放置路线,从集合的绘画数组中拉出正确的绘画:

 //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); } }) } }) });