【问题标题】:How to increment filed in mongodb mongoose如何在 mongodb mongoose 中增加字段
【发布时间】:2021-04-20 12:27:31
【问题描述】:
 const options = {
    $addToSet: { whoLikes: userId },
    $inc: { likesCount: 1 },
    new: true,
  };

collection.findByIdAndUpdate({ _id: postId }, options)

我想要的是增加 likesCount 只有当 whoLikes 数组长度增加。 现在 likesCount 一直在递增与 whoLikes 数组中有多少对象无关。

我正在使用猫鼬,node.js

【问题讨论】:

    标签: mongodb mongoose mongoose-schema


    【解决方案1】:
    • 使用findOneAndUpdate()方法
    • 只需检查查询部分中的条件 whoLikes: { $ne: userId } userId 不应该在 whoLikes 数组中
    • 用户$push 而不是$addToSet
    • 其他选项应该在第三个参数new:true
    const options = {
        $push: { whoLikes: userId },
        $inc: { likesCount: 1 }
    };
    
    collection.findOneAndUpdate(
      { 
        _id: postId,
        whoLikes: { $ne: userId }
      }, 
      options,
      { new: true }
    )
    

    Ex1:添加不存在的用户ID

    Playground

    Ex2:添加已经存在的用户ID

    Playground

    【讨论】:

    • 这个想法是更新喜欢计数只有当 whoLikes 得到更新。 whoLikes 是一个独特的 Set,每个用户只能被点赞一次,这就是我使用 addToSet 的原因。
    • 不需要,因为我们添加了条件whoLikes: { $ne: userId },所以如果 userId 已经存在,它不会第二次更新。你测试过这个查询吗?我已经添加了两个场景,你可以检查一下。
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2017-05-17
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多