繁体   English   中英

在 MongDB 中推送嵌套的 Object

[英]Pushing Nested Object in MongDB

我想从 Mongo Schema 访问嵌套元素。 我想要做的是当用户喜欢用户ID的评论时,如果我将commentLikes作为单独的父级,则应该将用户ID的评论推送到commentLikes数组中,该数组是评论的子项评论1,他的id也会被推送到评论2。

我的架构是:

 const mongoose = require("mongoose") const { ObjectId } = mongoose.Schema.Types const postSchema = new mongoose.Schema({ subject: { type: String, required: true }, title: { type: String, required: true }, body: { type: String, required: true }, photo: { type: String, default: "https://res.cloudinary.com/bigbrain/image/upload/v1616608676/noQ_hvukdh.png" }, likes: [{ type: ObjectId, ref: "User" }], comments: [{ text: String, postedBy: { type: ObjectId, ref: "User" }, commentLikes:[{ type: ObjectId, ref: "User" }], }], postedBy: { type: ObjectId, ref: "User" }, postDate:{ type:String } },{timestamps:true}) mongoose.model("Post", postSchema)

我的后端代码:

 router.put("/likecomment/:id/:comment_id",requireLogin,(req,res)=>{ const comment = { _id: req.params.comment_id }; Post.findByIdAndUpdate(req.body.postId,{ $push:{comments:req.user._id } },{ new:true }).exec((err,result)=>{ if(err){ return res.status(422).json({error:err}) } else{ console.log(result) res.json(result) } }) })

我的前端代码是:

 const likeComment = (commentid) => { fetch(`/likecomment/${postid}/${commentid}`, { method: "put", headers: { "Content-Type": "application/json", "Authorization": "Bearer " + localStorage.getItem("jwt") }, body: JSON.stringify({ postId: commentid }) }).then(res => res.json()).then(result => { const newData = data.map(item => { if (item._id === result._id) { console.log(result) return result } else { console.log(item) return item } }) setData(newData) }).catch(err => { console.log(err) }) }

我只是想访问后端评论中的commentLikes,我知道我的逻辑是正确的

 Post.findByIdAndUpdate(req.body.postId,{ $push:{comments:req.user._id }

我也尝试通过comments[commentLikes] 访问commentLikes,但它给了我一个错误。

如果我理解正确,那么当当前用户喜欢评论时,您会尝试将当前用户的 ID 插入到 commentLikes 数组中。

请参阅Mongo push to array inside array 您当前的代码会将新项目推送到评论中。 您应该在此处使用更新,以便您可以指定多个搜索条件。 这将让您在评论中找到元素,但您需要评论 ID 以及帖子 ID(否则,如果存在多个评论数组,您打算如何从评论数组中找到正确的项目?)

Post.update(
    {"_id" : req.body.postId, "comments._id": '{the ID of the comment that was liked}',
    {$push:{"comments.$.commentLikes": req._user.id}}
)

这将找到具有指定 ID 的帖子,根据最初发布它的人找到正确的推荐,并将当前用户的 ID 添加到 commentLikes 列表中。 但是,就像链接的答案状态一样,这是一种非常混乱的处理方式,最好有一个单独的评论集合,其 ID 指向帖子。 arrays 内部的 Arrays 变得非常复杂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM