首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mongo不会返回更新后的对象和promise

MongoDB是一种开源的、面向文档的NoSQL数据库管理系统。它以高性能、可扩展性和灵活性而闻名,并且广泛应用于各种应用场景中。

对于给定的问题,当使用MongoDB进行更新操作时,它默认不会返回更新后的对象。这是因为在MongoDB中,更新操作的返回结果默认是一个空对象,即使实际上已经进行了更新。这种设计是为了提高性能和减少网络传输的数据量。

如果需要获取更新后的对象,可以通过使用findOneAndUpdate方法来实现。该方法可以在更新文档的同时返回更新后的对象。示例代码如下:

代码语言:txt
复制
const updatedDocument = await collection.findOneAndUpdate(
  filter, // 更新条件
  update, // 更新操作
  { returnOriginal: false } // 设置为false,返回更新后的对象
);

在上述代码中,filter是一个用于指定更新条件的对象,update是一个用于指定更新操作的对象。returnOriginal参数设置为false,表示返回更新后的对象。

关于Promise,它是一种用于处理异步操作的对象,可以避免回调地狱(callback hell)的问题。在Node.js中,可以使用util.promisify方法将回调风格的函数转换为返回Promise的函数。示例代码如下:

代码语言:txt
复制
const util = require('util');
const findOneAndUpdateAsync = util.promisify(collection.findOneAndUpdate);

const updatedDocument = await findOneAndUpdateAsync(
  filter, // 更新条件
  update, // 更新操作
  { returnOriginal: false } // 设置为false,返回更新后的对象
);

以上代码中,findOneAndUpdateAsync是一个返回Promise的函数,可以使用await关键字来等待其执行结果。

总结一下,MongoDB默认情况下不会返回更新后的对象,但可以通过使用findOneAndUpdate方法并设置returnOriginal参数为false来获取更新后的对象。同时,Promise是一种用于处理异步操作的对象,可以简化异步代码的编写。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

前端js上传文件到COS对象存储后获取返回对象链接的方法

项目开发过程中往往会遇到前端js上传文件到COS对象存储没有返回对象链接的情况,今天跟大家分享一个CORS配置小技巧 由于COS上传密钥放在前端不安全,我们使用腾讯云生产的临时密钥配置在前端,通过前端...js sdk上传文件到COS对象存储,在不做任何配置的情况下,COS返回的信息只有Status Code和headers信息 image.png 如果我们想直接获取到上传成功的文件链接,需要在COS控制台...--找到相应的存储桶--基础配置--跨域访问CORS设置中, 添加如下规则: 来源Origin 操作Methods Expose-Headers 超时Max-Age * PUT...GET POST DELETE HEAD Etag Content-Length x-cos-request-id 5 image.png 保存后重新通过JS SDK上传,此时就会返回上传成功后文件的链接啦

13.3K11
  • ES6类的使用和定义.Json.Promise对象的使用

    的面向对象和这个很相似,但是在js其实是基于对象的,所谓的基于对象就是一直在用对象而不是,而不是完全使用面向对象的思想,面向对象我们都知道是封装,继承,多态,而基于对象,其实就是在使用对象。...对象比数组强的地方在于他有属性和方法。所以在js中很少使用类这个方式。...对象用来封装一个异步操作对象并可以捕获其结果 状态的特点 Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。...除了异步操作的结果,任何其他操作都无法改变这个状态。 Promise 对象只有:从 pending 变为 fulfilled 和从 pending 变为 rejected 的状态改变。...只要处于 fulfilled 和 rejected ,状态就不会再变了即 resolved(已定型)。 状态的缺点 无法取消 Promise ,一旦新建它就会立即执行,无法中途取消。

    5810

    最新的PHP操作MongoDB增删改查操作汇总

    echo ''; print_r($res); 三、数据修改 //update() //参数1:更新条件,指定更新的目标对象。...// w:默认为1;若设置为0,更新操作将不会得到确认;使用复制集时可设置为n,确保主服务器在将修改复制到n个节点后才确认该更新操作 // j:默认为false,若设置为true,数据将在更新结果返回之前写入到日志中...// w:默认为1;若设置为0,更新操作将不会得到确认;使用复制集时可设置为n,确保主服务器在将修改复制到n个节点后才确认该更新操作 // j:默认为false,若设置为true,数据将在更新结果返回之前写入到日志中...,若设置为true则返回更新后的文档,否则返回更新前的文档 // upsert:若设置为true,没有找到匹配文档的时候将插入一个新的文档 $mongo = new MongoClient('mongodb...// w:默认为1;若设置为0,更新操作将不会得到确认;使用复制集时可设置为n,确保主服务器在将修改复制到n个节点后才确认该更新操作 // j:默认为false,若设置为true,数据将在更新结果返回之前写入到日志中

    4K20

    nods.js 从入门到精通教程

    result){ // 获取文件内容成功时的处理 }).catch(function(error){ // 获取文件内容失败时的处理 }); ---- 返回promise对象 创建...Promise对象 * var promise = new Promise(function(resolve, reject) { // 异步处理 // 处理结束后、调用resolve...也就是promise对象刚被创建后的初始化状态等 promise对象的状态,从Pending转换为Fulfilled或Rejected之后, 这个promise对象的状态就不会再发生任何变化。...也就是说,Promise与Event等不同,在.then 后执行的函数可以肯定地说只会被调用一次。 另外,Fulfilled和Rejected这两个中的任一状态都可以表示为Settled(不变的)。...从Pending和Settled的对称关系来看,Promise状态的种类/迁移是非常简单易懂的。 当promise的对象状态发生变化时,用.then 来定义只会被调用一次的函数。

    13110

    JAVA语言异步非阻塞设计模式(原理篇)

    下面对同步 API、异步 listener API、异步 Promise API 的函数形式进行对比,如图 3-1 所示: 同步:调用 writeSync() 方法并阻塞;收到响应后函数停止阻塞,并返回响应数据...; 异步 listener:调用 writeAsync() 方法并注册 listener,函数立刻返回;收到响应后,在其他线程触发所注册的 listener; 异步 Promise:调用 writeAsync...(),但不需要在函数中注册 listener,函数立刻返回 Promise 对象。...以 netty 为例,当从网络上收到响应据后,其中一个线程得到通知,执行 channelRead() 函数进行处理;函数取出响应数据和对应的 Promise 对象,并调用 Promise.signalAll...图 3-2a 提交数据库访问请求 图 3-2b 创建 Promise 对象 图 3-2c 通知 Promise 对象 Promise 的时序 Promise 的方法需要保证以下时序。

    95030

    从一个被更新后的GTF文件得到geneID和gene类型的对应关系

    (本文作者:drjimmiewen ) 上个月听了jimmy老师的巡讲后,开始学习GEO数据挖掘,看了相关视频后,想实战一把,于是看了jimmy老师去年开始分享的GEO数据挖掘帖子,没想到第一期就碰到个钉子...原帖在GEO数据挖掘-第一期-胶质母细胞瘤(GBM) 前面都一帆风顺,但是到第二步 得到geneID和gene类型的对应关系时,遇到了钉子 ? 进入帖子说的网站,发现是这样的 ?...可以看到数目偏少(只有7641个),且gene和type出现了很多奇怪的内容,感觉肯定是转化的时候出问题了 然后又仔细研究了一下下载的网站,发现可以找到老师原帖的历史版本gtf文件 ?...看来我这个探索经历还是挺有意义的哈哈 心得 最后是自己的一点体会吧,完事开头难,学生信需要智慧,更需要毅力和不断地探索,一个小的不能再小的问题也值得自己好好琢磨,你看看我,被jimmy老师一逼,起码,一...,搞懂了两个网站以及GTF数据的下载和内容概要读取;二,转化文件的时候重温了下shell语言;最后,竟然还顺便学会了用markdown 交作业!!

    3.5K30

    基于web的项目资源分配系统

    对象的一种超越关系型的数据库,但和SQL类似,mongo也支持关系代数和集合论,也拥有索引和过滤器,创新的地方在于它可以储存嵌套的数据结构,为此还专门设计了一个叫做BSON的二进制协议格式,用于底层的存储和传输...用户编辑完某一单元格数据后,数据并不会立即更新,新数据以文本串的形式传递到parser函数,经过一定的规则验证或“修订”后再写入新数据。...网络层的promise则从接收一个原始数据开始,发送http,返回结果并解析返回数据完成。...事件完成后再将/mongo_backup目录打包成zip文件,同样以流的形式返回给用户,整个过程共享一个http来回。...((res, rej) => { // 更新并返回更新前的数据 coll.findOne(user, (err, result) => { if (err) rej(err); // 否则返回null

    4.5K70

    《后现代全栈系统的设计与应用》

    对象的一种超越关系型的数据库,但和SQL类似,mongo也支持关系代数和集合论,也拥有索引和过滤器,创新的地方在于它可以储存嵌套的数据结构,为此还专门设计了一个叫做BSON的二进制协议格式,用于底层的存储和传输...用户编辑完某一单元格数据后,数据并不会立即更新,新数据以文本串的形式传递到parser函数,经过一定的规则验证或“修订”后再写入新数据。...网络层的promise则从接收一个原始数据开始,发送http,返回结果并解析返回数据完成。...事件完成后再将/mongo_backup目录打包成zip文件,同样以流的形式返回给用户,整个过程共享一个http来回。...((res, rej) => { // 更新并返回更新前的数据 coll.findOne(user, (err, result) => { if (err) rej(err); // 否则返回null

    1.1K20

    C++ 新特性学习(五) — 引用包装、元编程的类型属性和计算函数对象返回类型

    、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象...()操作符, 用于执行引用的函数 同时与其配对的函数有 std::ref 返回std::reference_wrapper,可以视为转换对象为引用 std::cref 返回常量引用对象std::reference_wrapper...,可以视为转换对象为引用 例程: // 和std::function和std::bind函数配合使用 #include #include void assign...); printf("a => %d, b => %d\n", a, b); return 0; } 注意:如果不用std::ref包装,即便函数申明需传入引用类型,但是由于绑定变量和函数的参数类型推断是分离的...(仿函数)的返回值类型 主要涉及一个模板函数std::result_of,它使用了decltype并支持函数对象(关于decltype请参见 https://www.owent.net/2011/508

    1.3K30

    C++ 新特性学习(五) — 引用包装、元编程的类型属性和计算函数对象返回类型

    、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象...()操作符, 用于执行引用的函数 同时与其配对的函数有 std::ref 返回std::reference_wrapper,可以视为转换对象为引用 std::cref 返回常量引用对象std::...reference_wrapper,可以视为转换对象为引用 例程: // 和std::function和std::bind函数配合使用 #include #include <functional...); printf("a => %d, b => %d\n", a, b); return 0; } 注意:如果不用std::ref包装,即便函数申明需传入引用类型,但是由于绑定变量和函数的参数类型推断是分离的...(仿函数)的返回值类型 主要涉及一个模板函数std::result_of,它使用了decltype并支持函数对象(关于decltype请参见 https://www.owent.net/2011/508

    1.8K30

    深入浅出mongodb(一)

    MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组,操作起来比较简单和容易。...,mongo是 mongodb 的客户端 1.2 运行 mac $ mongo windows 服务端 C:\MongoDB\bin mongod --dbpath=....更多的文档参考https://mongoosejs.com/docs/schematypes.html[5] ?有人可能会问为什么 ObjectId 可以做唯一标识符呢,不会重复吗?...第二种写法是返回promise 上述定义 model 的方法是通过 model 类创建的,还有一种创建 model 的方法是通过实例创建,这个创建出来的是一个操作对象,代表是一个单个文档只能操作自己。...,欢迎大家的留言和评论,还有后续更新,下期更加精彩 参考资料 [1] 菜鸟教程: https://www.runoob.com/mongodb/mongodb-intro.html [2] mongodb

    4K10

    ​MongoDB 4.0 系列之 b—— 事务实现解析(b一)

    Mongo进行一个多文档事务,必须和一个session对象绑定。通过 startTransaction/ CRUD / commitTransaction 三段式来进行。 ?...可以看到,startTransaction方法并没有返回值,事实上,它只是设置了writeConern/readConcern等参数, 而mongo提供的和session相关的commands列表中,也只有...mongo3.x系列的单行事务,是把索引,数据,oplog的更新放在了一个wt事务里,每一次写/更新操作都是一个事务,而万变不离其宗,4.0中的多行事务,设计了一个session对象给用户,session...mongo里也保证,以 writeConcern:majority的方式写入的数据,一定不会丢失,否则,主从切换后,与新主不一致的oplog,必须要被rollback掉。 ?...本节点在宕机之前是Primary,在重启后本地oplog有和当前Primary不一致的Oplog。 这两种情况分别如下图所示: ? ?

    1K30

    Play For Scala 开发指南 - 第10章 MongoDB 开发

    另外 Mongo Scala Driver 的数据库操作默认返回 Observable 类型,如果你忘记了调用 toFuture 方法,或是没有消费返回数据,则数据库操作实际上并不会被执行,在开发中很容易引入一些...ReactiveMongo 主要有三个问题,一是版本更新不够及时,无法跟上 MongoDB 的更新节奏;二是可能存在安全隐患,容易造成生产事故,详情参考:issue#721。...另外 Play Mongo 不会过多关注底层驱动的实现细节,而是将关注点放在与 Play Framework 的集成上,可以为开发者提供更舒适的开发体验。...} 由于这些隐式的 Format 对象是在模型层的包对象(package object)中创建的,所以使用时无需显式导入,编译器会自动加载。...对缓冲后的元素进行流控,每秒只允许通过1个元素 mongo   .collection[User]   .watch()   .fullDocument   .toSource   .groupedWithin

    1.5K10
    领券