You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB中向指定记录的upvoters数组追加元素且不覆盖原有内容

问题原因

你当前的写法是直接给upvoters字段赋值新数组,MongoDB会直接用新值覆盖原有字段内容,自然会清空之前的数组数据。另外你原有代码里写的["req.params.userid"]是把字符串"req.params.userid"存入数组,没有取到实际的用户ID变量值。

解决方案

用MongoDB提供的数组更新操作符实现追加效果:

  1. 基础追加用$push操作符,会直接在数组末尾添加元素
  2. 点赞场景推荐用$addToSet操作符,只有用户ID不在数组中时才会添加,天然避免重复点赞的问题

修改后代码

基础追加版本

router.post('/upvoted/:articleid/:userid', (req, res) => {
    Article.findOneAndUpdate(
        { articleid: req.params.articleid },
        { $push: { upvoters: req.params.userid } },
        (failure, success) => {
            if (success) {
                res.status(200).send("done")
            } else {
                res.status(200).send("not done")
            }
        }
    )
})

优化版本(推荐)

额外增加去重逻辑,同时同步更新点赞数,符合实际业务需求:

router.post('/upvoted/:articleid/:userid', (req, res) => {
    Article.findOneAndUpdate(
        { articleid: req.params.articleid },
        {
            $addToSet: { upvoters: req.params.userid },
            $inc: { upvotes: 1 }
        },
        { new: true }, // 可选配置,返回更新后的最新文档数据
        (err, result) => {
            if (result) {
                res.status(200).send("done")
            } else {
                res.status(500).send("not done")
            }
        }
    )
})

内容的提问来源于stack exchange,提问作者Tanzeel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:48:01