Mongodb 保存后使用猫鼬瘦肉

Mongodb 保存后使用猫鼬瘦肉,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,因此,我尝试向返回的post添加一个键。但我似乎无法让lean()工作。保存后如何处理返回的帖子 我在想也许我需要像这样将lean添加到我的findById中Post.findById(req.params.id).lean().then()。但这不起作用,而且这只会使第一个初始帖子变为可变的。它会说 post.save不是一个函数 如果我像Post.findById(req.params.id).lean().then()那样做 我只想返回将要发送回客户端的对象,我不希望它们的密钥保存在实际文

因此,我尝试向返回的
post
添加一个键。但我似乎无法让
lean()
工作。保存后如何处理返回的帖子

我在想也许我需要像这样将lean添加到我的
findById
Post.findById(req.params.id).lean().then()
。但这不起作用,而且这只会使第一个初始帖子变为可变的。它会说

post.save不是一个函数

如果我像
Post.findById(req.params.id).lean().then()
那样做

我只想返回将要发送回客户端的对象,我不希望它们的密钥保存在实际文档中

 Post.findById(req.params.id)
      .then(post => {
        if (
          post.likes.filter(like => like.user.toString() === req.user.id)
            .length === 0
        ) {
          return res
            .status(400)
            .json({ notliked: "You have not yet liked this post" });
        }

        // Get remove index
        const removeIndex = post.likes
          .map(item => item.user.toString())
          .indexOf(req.user.id);

        // Splice out of array
        post.likes.splice(removeIndex, 1);

        // Save
        post.save().then(post => {  
          post["liked"] = false;  <-------
          res.json(post);
        });
      })
出错

post.save不是一个函数


您只需在
indexOf
likes
数组中搜索
req.user.id
即可

Post.findOne({ _id: req.params.id }).lean().then((post) => {
  if (post.likes.indexOf(req.user.id) !== -1) {
    post.isLiked = true
  }
  post.isLiked = false
  res.json(post)
})
使用聚合更好

Post.aggregate([
  { "$match": { "_id": mongoose.Types.ObjectId(req.user.id) }},
  { "$addFields": {
    "isLiked": { "$in": [mongoose.Types.ObjectId(req.user.id), "$likes"] }
  }}
])
编辑:-如果要更新文档,请使用更新查询

Post.findOneAndUpdate(
  { _id: req.params.id },
  { $pull: { likes: { user: req.user.id } }},
  { new: true }
).then((post) => {
  res.json(post)
})
喜欢的帖子模式

...
    likes: [
        {
          user: {
            type: Schema.Types.ObjectId,
            ref: "users"
          }
        }
      ]
...

您想为请求的用户更新文档还是返回
liked
true或false?我想保存具有修改数组的更新文档,然后在响应正文中修改帖子我编辑了我的问题并修改了
post
,然后保存并将其作为响应发送回,但仍然获得帖子。保存不是一个选项功能。我将不得不查看聚合,但希望使用第一种方法。您不需要使用
。保存
,因为您不想更新文档。按照我的第一个问题,我澄清了我对你最初问题的回答。对不起,更新了我的回答谢谢你,先生。我添加了我的模式,因此我所做的编辑对其他人有意义。
...
    likes: [
        {
          user: {
            type: Schema.Types.ObjectId,
            ref: "users"
          }
        }
      ]
...