通过mongoose Expresss在mongodb中进行推拉操作。

问题描述 投票:0回答:1

我遇到了一个情况,我必须进行推拉结合。

我有一个分类和帖子的Schema,其中帖子可以有多个分类,而分类将有多个帖子的数组,使用Mongoose的对象引用方法,比如这样--。

    PostSchema= new mongoose.Schema({
      title:{type:String, required:true},
      content:{type:String, required:true}, 
      categories:[{type:mongoose.Schema.Types.ObjectId, ref:'Categories'}]     
})

同样的方式,我也为类别设置了Schema-。

   CatSchema = new mongoose.Schema({
      name:{type:String, required:true},
      slug:{type:String, required:true}, 
      posts:[{type:mongoose.Schema.Types.ObjectId, ref:'Posts'}]     
})

现在,当我创建一个帖子时,我把postId推送到Categories集合的所有类别中,但当我试图更新帖子并选择与之前不同的类别时,问题就会发生。

但当我尝试更新帖子并选择不同的类别时,问题就会发生。

我仍然可以在新选择的类别中推送更新的postId,但我如何从那些在更新时没有选择但在创建时选择的类别中提取postId。他们仍然存储这个postId,因为它是最初推送的。

更清楚的说,我希望每当更新一个分类时,都能更新分类集合中的post数组。欢迎所有类型的解决方案,包括创建模式或解决这个特殊问题的更好的方法。

node.js mongodb express mongoose mongoose-schema
1个回答
0
投票

我知道这次更新你需要postID,arrayOldCaretoryiesID,arrayNewCategoriesID。

让我们从当前帖子中找到并删除你需要的类别。

const deletedCatFromPost = await Post.updateOne({ _id: postID }, { $pull: { categories: arrayOldCaretoryiesID } })

其次,通过一个数组ID从旧分类中删除你需要的帖子。

const removedOldCategories = await Categories.updateMany({_id:{$or: arrayOldCaretoryiesID }},{ $pull:{ posts: postID }})

最后,通过一个ID数组向新类别中添加一个新的postID。

const addNewCategories = await Categories.updateMany({_id: { $or: arrayNewCategoriesID} },{$push:{ posts: postID }})

希望能帮到你。

更新内容:

第二,从旧的类别中按ID数组删除你需要的帖子。

const removedOldCategories = await Categories.updateMany({_id:{$in: arrayOldCaretoryiesID }},{ $pull:{ posts: postID }})
© www.soinside.com 2019 - 2024. All rights reserved.