findOneAndUpdate似乎使我的$ inc数量增加了一倍

时间:2020-04-05 02:06:23

标签: node.js mongodb mongoose

我正在尝试在我的MERN应用的帖子上发表评论,但是我遇到了一个问题,该评论(Posts.findOneAndUpdate)似乎发表了两次评论。我在SO上读了几篇文章,描述了该问题是猫鼬处理查询的方式,但我一定缺少一些东西。

如果有人可以解释我在做什么错,我将不胜感激!

我正在使用的路线:

router.post('/newReply/:id', async function(req, res) {
    const body = req.body

    if (!body) {
        return res.status(400).json({
            success: false,
            error: 'No text entered!',
        })
    }

    const reply = new Replies(body)
    if (!reply) {
        return res.status(400).json({ success: false, error: err })
    }

    await Posts.findOneAndUpdate(
        { _id: req.params.id },
        {
            "$inc": { "replies": 1 },
            "$push": { "comments": reply },
        },
        {
            new: true
        },
        (err) => {
            if (err) {
                return res.status(404).json({
                    success: false,
                    error: err,
                    message: 'Post not found!',
                })
            }
            return res.status(200).json({ 
                success: true,
                id: reply._id,
                message: 'Reply created!',
                reply: reply.reply,
                points: reply.points,
                createdAt: reply.createdAt
            })
        })
        .catch(err => console.log(err))
    })

帖子模型

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// Create Schema
const PostsSchema = new Schema({
  post: {
    type: String,
    required: true
  },
  points: {
    type: Number,
    default: 0
  },
  voters: {
    type: Array
  },
  upvotedBy: {
    type: Array
  },
  downvotedBy: {
    type: Array
  },
  createdAt: {
    type: Date,
    default: Date.now
  },
  replies: {
    type: Number,
    default: 0
  },
  comments: {
    type: Array
  },
  user_id: {
    type: 'string'
  },
  deleted: {
    type: Boolean,
    default: false
  }
});

module.exports = Posts = mongoose.model("posts", PostsSchema);

0 个答案:

没有答案