我在nodejs环境中使用mongodb native driver,我需要将id字符串转换为ObjectId,以便在更新查询中使用它,我如何才能做到这一点?

推荐答案

ObjectId(nodejs driver doc)

如果有一个表示BSON ObjectId的字符串(例如从web请求接收),则需要将其转换为ObjectId实例:

const {ObjectId} = require('mongodb'); // or ObjectID 
// or var ObjectId = require('mongodb').ObjectId if node version < 6

const updateStuff = (id, doc) => {
  // `ObjectId` can throw https://github.com/mongodb/js-bson/blob/0.5/lib/bson/objectid.js#L22-L51, it's better anyway to sanitize the string first
  if (!ObjectId.isValid(s)) {
    return Promise.reject(new TypeError(`Invalid id: ${id}`));
  }
  return collection.findOneAndUpdate(
    {_id: ObjectId(id)}, 
    {$set: doc}, 
    {returnOriginal: false}
  );
};

Node.js相关问答推荐

链接Inbox类方法,范围在哪里以及为什么发生变化?

无法从ejs Web应用程序中的正文中提取数据

当FastifyJS向客户端发送响应时,apache 不会将其发送给他

如何在不丢失其他键的情况下解开子文档数组,然后反转该过程?

如何在MongoDB中更新嵌套数组

运行本地移动自动化测试时,在onPrepare钩子中,ERROR @wdio/cli:utils: A service failed in the 'onPrepare'

将 null 推入管道后,node.js 可写完成未发出

如何使用对象中的常量值验证字符串字段?

为什么 FastAPI 需要 Web 服务器(即 Nginx)而不是 Express API?

Google Calendar API FreeBusy 外部用户

我怎样才能让`git`失败而不是要求提供凭据

如何从 github 编译第三方扩展?

node.js 中 res.setHeader 和 res.header 的区别

Node.js 表达的 Error 对象expose 了哪些属性?

node.js 是否支持yields ?

socket.io 发出回调合适吗?

使用 ES6 语法和动态路径导入模块

PhoneGap/Cordova Android 开发

如何忽略文件 grunt uglify

NodeJS 中的 HTTPS 请求