Node.js使用MongoDB的ObjectId作为查询条件的方法


Posted in Javascript onSeptember 10, 2019

当往MongoDB中插入一条数据时,会自动生成ObjectId作为数据的主键。 那么如何通过ObjectId来做数据的唯一查询呢?

在MongoDB中插入一条数据

在MongoDB中插入一条如下结构的数据:

{
 _id: 5d6a32389c825e24106624e4,
 title: 'GitHub 上有什么好玩的项目',
 content: '上个月有水友私信问我,GitHub 上有没有比较好玩的项目可以推荐?我跟他说:"有,过两天我整理一下"。\n' +
  '\n' +
  '然而,一个月过去了,我把这件事情忘了精光,直至他昨天提醒我才记起2_05.png。\n',
 creation: 2019-08-31T08:39:20.384Z
}

其中,上述_id的值“5d6a32389c825e24106624e4”,是MongoDB自动分配的。

使用 MongoDB 的 ObjectId 作为查询条件

须知,_id的值“5d6a32389c825e24106624e4”并非是字符串,而是ObjectId对象类型。因此,如下查询是行不通的:

// 查询指定文档
const findNews = function (db, newsId, callback) {
  // 获取集合
  const news = db.collection('news');

  // 查询指定文档
  news.findOne({_id: newsId},function (err, result) {
    if (err) {
      console.error('error end: ' + err.stack);
      return;
    }
    
    console.log("查询指定文档,响应结果是:");
    console.log(result);
    callback(result);
  });
}

需将上述newsId转为 ObjectId对象类型。怎么做呢?做法参考如下:

const ObjectId = require('mongodb').ObjectId;

// 查询指定文档
const findNews = function (db, newsId, callback) {
  // 获取集合
  const news = db.collection('news');

  // 查询指定文档
  news.findOne({_id: ObjectId(newsId)},function (err, result) {
    if (err) {
      console.error('error end: ' + err.stack);
      return;
    }
    
    console.log("查询指定文档,响应结果是:");
    console.log(result);
    callback(result);
  });
}

其中,require('mongodb').ObjectId用于获取ObjectId类,并将字符串newsId转为了 ObjectId 类型。

参考引用

完整源码:https://github.com/waylau/mean-book-samples

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用Javscript实现表单复选框的全选功能
May 25 Javascript
利用javascript移动div层-javascript 拖动层
Mar 22 Javascript
JSON 教程 json入门学习笔记
Sep 22 Javascript
js中document.write使用过程中的一点疑问解答
Mar 20 Javascript
js代码实现随机颜色的小方块
Jul 30 Javascript
javascript实现滚动效果的数字时钟实例
Jul 21 Javascript
深入浅析search 搜索框的写法
Aug 02 Javascript
jQuery事件详解
Feb 23 Javascript
Underscore之Array_动力节点Java学院整理
Jul 10 Javascript
使用SVG基本操作API的实例讲解
Sep 14 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
node-red File读取好保存实例讲解
Sep 11 Javascript
layui表格 返回的数据状态异常的解决方法
Sep 10 #Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
Sep 10 #Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 #Javascript
layer.open回调获取弹出层参数的实现方法
Sep 10 #Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 #Javascript
npm 语义版本控制详解
Sep 10 #Javascript
解决layui的input独占一行的问题
Sep 10 #Javascript
You might like
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
PHP实现递归无限级分类
2015/10/22 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
关于热爱祖国的演讲稿
2014/05/04 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang