使用 .save() 与 findByIdAndUpdate() 从数组中删除项目

2023-11-29

我在用.pull从 mongo db 中的数组中删除一条记录,它工作得很好,但是我在堆栈溢出的某个地方读到的一条评论(无法再次找到它来发布链接)让我很困扰,因为它评论说它不好用.save而不是使用.findByIdAndUpdate or .updateOne

我只是想知道这是否准确或主观。

我目前就是这样做的。我检查具有该 id 的产品是否确实存在,如果存在,我从数组中提取该记录。

exports.deleteImg = (req, res, next) => {
  const productId = req.params.productId;
  const imgId = req.params.imgId;
  Product.findById(productId)
    .then(product => {
      if (!product) {
        return res.status(500).json({ message: "Product not found" });
      } else {
        product.images.pull(imgId);
        product.save()
        .then(response => {
          return res.status(200).json( { message: 'Image deleted'} );
        })
      }
    })
    .catch(err => {
      console.log(err);
    });
};

我认为他们所说的是应该这样做(我在谷歌后找到的一个例子)

users.findByIdAndUpdate(userID,
    {$pull: {friends: friend}},
    {safe: true, upsert: true},
    function(err, doc) {
        if(err){
        console.log(err);
        }else{
        //do stuff
        }
    }
);

主要区别在于,当您使用findById and save,您首先从 MongoDB 获取对象,然后更新您想要的任何内容,然后保存。当您不需要担心并行性或对同一对象的多个查询时,这是可以的。

findByIdAndUpdate是原子的。当您多次执行此操作时,MongoDB 将为您处理并行性。按照您的示例,如果同时对同一对象发出两个请求,则传递{ $pull: { friends: friendId } },结果将是预期的:只会从数组中拉出一个朋友。

但假设你在这个物体上有一个计数器,比如friendsTotal起始值为 0。对于同一个对象,您到达的端点必须将计数器增加一两次。

如果你使用findById,然后增加,然后save,你会遇到一些问题,因为你正在设置整个值。因此,您首先获取对象,增加到 1,然后更新。但另一个请求也做了同样的事情。你最终会得到friendsTotal = 1.

With findByIdAndUpdate你可以用{ $inc: { friendsTotal: 1 } }。因此,即使您在同一时间对同一个对象执行此查询两次,您最终也会得到friendsTotal = 2,因为 MongoDB 使用这些更新运算符来更好地处理并行性、数据锁定等。

查看更多关于$inc here: https://docs.mongodb.com/manual/reference/operator/update/inc/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 .save() 与 findByIdAndUpdate() 从数组中删除项目 的相关文章

  • Bot Framework openUrl 不适用于信使上的建议操作

    我正在使用 Bot Builder Node js sdk 创建 facebook 机器人 并尝试创建建议操作 该操作将用户导航到网页 我知道 facebook 有限制 它仅重定向到 https 端点 但由于我重定向到的页面是 https
  • 为什么我在 Intellij IDEA 11 中调试 Nodejs 应用程序失败?

    我有一个单进程 node js 应用程序 我希望使用 Intellij IDEA 11 32 位进行调试 node js 也是 32 位 因此 我放置一个初始断点并运行 调试器在断点处停止 但随后拒绝执行以下任何操作 步入 转到另一个断点
  • 找到 Webpack 配置文件但未配置条目

    我正在尝试为我的个人项目组织一个 webpack 2 模板webpack dev server并使用 npm 命令运行它 但我收到此错误 Configuration file found but no entry configured 这很
  • 什么是 Node.js 模块?

    关于这个问题 Node js module exports 的用途是什么以及如何使用它 https stackoverflow com questions 5311334 what is the purpose of nodejs modu
  • Node + Express .post 路由抛出错误。预期回调,获得对象

    我目前正在开发一个使用 Express Node 的应用程序 我最近添加了一个新的 post路线到app js文件 使用以下语法 app post api posts saveComment posts saveComment posts上
  • Node.js 有水豚吗?

    有谁知道 Node js 是否有类似 capybara 的东西 怎么样Zombie http zombie labnotes org 僵尸 js 使用 Node js 进行极其快速的无头全栈测试 The Bite 如果你要编写一个速度极快的
  • 节点检查器显示对象“无属性”

    我在调试场景中相当陌生 尤其是节点检查器 安装节点检查器后 我使用 debug 参数启动了简单的节点应用程序 并且能够在 localhost 8080 debug port 5858 处看到调试视图 当我让应用程序在此断点处停止时 rout
  • 如何在 PyV8 中加载 Nodejs 模块?

    如何在 PyV8 中加载 Nodejs 模块 我读过所有关于 jsdom 在与 Nodejs 一起运行时有多么出色的内容 如果我在 Python 应用程序中运行 v8 使用 python 获取 Web 资源 然后将生成的 html 字符串提
  • 将 html2pdf 生成的 pdf 发送回服务器

    我必须使用以下命令发送客户端生成的 PDFhtml2pdf到服务器 我已成功将生成的 PDF 转换为 base64 并希望使用axios 这是我的客户端代码 function myFunction var element document
  • 语法错误:elasticdump 中的exports.runInThisContext (vm.js:53:16) 处出现意外标记 {

    我试图使用elasticdump 将elasticsearch 数据从一台服务器移动到另一台服务器 当我给予 elasticdump input http 192 168 0 122 9200 my index output http lo
  • 如何使用 Nodejs 创建 Excel 文件?

    我是一名 Nodejs 程序员 现在我有一个数据表 我想将其保存为 Excel 文件格式 我该怎么做呢 我找到了一些 Node 库 但其中大多数是 Excel 解析器而不是 Excel 编写器 我使用的是 Linux 服务器 因此需要一些可
  • Child_process 处理带有回车符 (\r) 的 STDOUT 流

    我正在编写一个简单的应用程序 它允许工作中的内部系统请求从远程服务器到使用 REST 调用发起的另一个远程服务器的复制过程 使用 rsync 我已经对express框架足够熟悉 并且刚刚开始尝试child process库 并偶然发现了一个
  • Sequelize.js - “不关联到”

    我在从数据库获取完整数据时遇到一些问题 那是我的模型 User module exports function sequelize DataTypes return sequelize define user id type DataTyp
  • socket.io 作为客户端

    有什么方法可以将socketio作为客户端运行 不是浏览器 而是nodejs脚本 我需要将数据从服务器广播到一些客户端 浏览器 和另一台linux机器 仅运行nodejs来获取变量 没有浏览器 欢迎任何想法 Regards github上有
  • 重写规则,以便正确加载具有绝对路径的 css 和 js 文件

    我花了两个小时 但我无法弄清楚 我不知道如何谷歌解决方案 这是我在 htaccess 文件中的重写规则 RewriteCond REQUEST URI blog RewriteRule blog http localhost 2368 1
  • 如何将 Gulp 添加到我的项目中?

    我正在使用 Windows 7 Visual Studio 2013 我正在尝试在我的客户项目中设置 Gulp 我已将这些 Nuget 添加到项目中 Node js 版本 0 12 0 Npm js 版本 1 3 15 10 由于某种原因我
  • Cloud Functions for Firebase - 通过 Nodejs/Cloud Function 将多个 PDF 合并为一个

    我遇到了一个问题 我试图通过云功能合并一堆 PDF 然后将合并的 PDF 下载到用户的计算机上 我的提供程序中有一个函数 它调用云函数并传递指向 pdf 的 URL 数组 如下所示 mergePDFs pdfs Create array o
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 如何清除NPM的https代理设置?

    如何清除NPM之前的ssl代理设置 好吧 我搜索了很多 但我得到的所有帖子主要是关于如何set公司网络中的代理 我尝试将代理设置为空 npm config set http proxy npm config set https proxy
  • 我想在“npm install”上下载一些资源,大概使用“预发布”脚本

    具体来说 我想在运行 npm install 时下载 angular min js 从我读到的here https npmjs org doc scripts html做这些事情的地方是在预发布脚本 它还提到我不需要依赖在系统上安装 wge

随机推荐

  • 将 System.Net.WebRequest 与已知 IP 端点一起使用

    我有大量已解析为 IP 地址的 DNS 名称 对于这个集合 我需要从其中下载 HTML 这是一个非常大的清单 我需要尽可能高效地完成它 我在用着System Net HttpWebRequest从每个域下载 HTML HttpWebRequ
  • 在 System.Drawing 中找不到“点”

    我所知 Point存在于命名空间中系统图 但 Visual Studio 找不到它 using System Drawing class Flower public Point Location get private set 错误 找不到
  • 图像 (2D) 的 PSF(点扩散函数)

    我是图像分析 使用 Python 的新手 我想对我的数据 CT 扫描 应用 richardson lucy 反卷积 来自 skimage 为此 我通过特定的软件以 体素数 来估计PSF 它的值大约是 6 73 体素 但我不知道如何将它用作函
  • 如何在Python中获取当前模块属性的引用

    我想要做的在命令行中看起来像这样 gt gt gt import mymodule gt gt gt names dir mymodule 我如何获得对中定义的所有名称的引用mymodule从内部mymodule itself 像这样的东西
  • PHP cookie 有一个刷新延迟[重复]

    这个问题在这里已经有答案了 可能的重复 Cookie只在刷新时显示 我正在尝试设置一个基本的 PHP cookie 它会记住使用的颜色主题 然而 当我测试它时 颜色主题的设置和显示之间存在一次刷新滞后 澄清一下 我有一个选择表单 允许用户选
  • Swift 编译器挂起!这是一个错误吗?

    有一次 当我正在开发 Swift 项目时 Xcode 的状态栏中出现了 编译 Swift 源代码 消息 无论等多久 编译都没有完成 我回滚了最近的更改 很快意识到让编译器感到困惑的是一个非常简单的枚举结构 下面是一个说明该问题的 Playg
  • nodeJS将数据插入PostgreSQL错误

    我在使用 NodeJS 和 PostgreSQL 时遇到了一个奇怪的错误 我希望你能帮助我 我有大量的数据集 大约有 200 万个条目 我想将它们插入到数据库中 一份数据由 4 列组成 id string points float mid
  • plone 中的文件是否存在与修订版本一样多的副本?

    在 plone 中 如果文件 或任何内容 被修改 例如 4 次 则存在多少个物理副本 我正在使用 plone 4 1 其中文件和图像存储在文件系统上 内容对象由多个持久记录组成 对于文件系统上包含二进制 blob 文件的图像和文件 当内容对
  • 如何获取非公开成员的值

    如何在 C 中使用 OPCDA NET 获取 OPCGroup 的非公共成员的值 private void DataChangeHandler object sender DataChangeEventArgs e try object o
  • 当月剩余天数

    指定月份剩余天数 如何查找当月剩余天数 示例 如果当前月份是 11 月 今天的日期是 16 11 2016 一个月的天数 经过的天数 我想动态地做 在我的例子中 30 16 14 declare date date set date 16
  • Outlook 加载项 API 不会在 Firefox/Chrome 上持续触发 ItemChange 事件

    我们已在 Outlook 加载项的清单中启用任务窗格固定 并注意到除了 Windows Outlook 2016 客户端之外 现在 Outlook Office Online 中也提供固定支持 但是 那ItemChange切换邮件项目时 事
  • 无法在单个 UIViewController 中隐藏状态栏

    我想在单视图控制器中隐藏状态栏 但我的代码不起作用 我正在使用下面的代码 BOOL prefersStatusBarHidden return YES void viewWillApper BOOL animated UIApplicati
  • Undersore 的 _.now 如何工作?

    它看起来不像是用 JavaScript 编写的 如果你输入 now在控制台中 你只能得到 function now native code 通常只有当您尝试查看某些内部工作方式对浏览器不可见的内置方法时 您才会明白这一点 setTimeou
  • 查询保存为 npz 的 NumPy 数组的 NumPy 数组很慢

    我生成一个 npz 文件 如下所示 import numpy as np import os Generate npz file dataset text filepath test np load npz texts for text n
  • python 3中的函数注释出现“名称未定义”错误

    我正在尝试使用 python3 类型注释功能 这是一些没有注释的玩具函数 def fa func args return func args def fb x str return x returned fa fb Newton 这些工作正
  • 抑制 bash 中的警告输出

    mysql tzinfo to sql usr share zoneinfo mysql u root mysql 我尝试添加 2 gt dev null gt dev null 等 似乎没有什么可以抑制警告 mysql tzinfo to
  • 使用 PDO 插入数据库

    我正在尝试将数据插入服务器上的数据库中 要连接到我的数据库 我有以下代码 这一切都很好 我已将其包含在我的代码中 因此这不是问题 这是我将数据插入数据库的代码
  • 查找 Drawable 资源时出现 NotFoundException

    我从 android 开始 我想按照描述为单元格添加边框在这个答案中 所以我创建了 cell background xml 文件 Eclipse 在其中创建了该文件res drawable其中包含
  • 了解行内元素、垂直对齐、行框和行高

    vertical align bottom means the bottom inline box matches the bottom of its line box so in my case the inline box of spa
  • 使用 .save() 与 findByIdAndUpdate() 从数组中删除项目

    我在用 pull从 mongo db 中的数组中删除一条记录 它工作得很好 但是我在堆栈溢出的某个地方读到的一条评论 无法再次找到它来发布链接 让我很困扰 因为它评论说它不好用 save而不是使用 findByIdAndUpdate or