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 相关文章推荐
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
Javascript this 关键字 详解
Oct 22 Javascript
jQuery判断一个元素是否可见的方法
Jun 05 Javascript
详解JavaScript中的every()方法
Jun 08 Javascript
jQuery实现简单的点赞效果
May 29 Javascript
表单中单选框添加选项和移除选项
Jul 04 Javascript
js浏览器html5表单验证
Oct 17 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
element-ui循环显示radio控件信息的方法
Aug 24 Javascript
vue+axios+promise实际开发用法详解
Oct 15 Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 Javascript
vue请求数据的三种方式
Mar 04 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遍历数组的方法汇总分析
2013/06/08 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
Dojo 学习要点
2010/09/03 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
Python编写百度贴吧的简单爬虫
2015/04/02 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
python获取代理IP的实例分享
2018/05/07 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Python continue语句实例用法
2020/02/06 Python
python正则表达式实例代码
2020/03/03 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
婚前协议书
2014/04/15 职场文书
2015年科普工作总结
2015/07/23 职场文书
任命书格式模板
2015/09/22 职场文书
品德与社会教学反思
2016/02/24 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android