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 相关文章推荐
Js获取事件对象代码
Aug 05 Javascript
javascript浏览器兼容教程之事件处理
Jun 09 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
JavaScript:Date类型全面解析
May 19 Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
移动端如何用下拉刷新的方式实现上拉加载
Dec 10 Javascript
手把手带你封装一个vue component第三方库
Feb 14 Javascript
微信小程序实现的canvas合成图片功能示例
May 03 Javascript
vue 返回上一页,页面样式错乱的解决
Nov 14 Javascript
js DOM的事件常见操作实例详解
Dec 16 Javascript
使用React代码动态生成栅格布局的方法
May 24 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日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
javascript定时变换图片实例代码
2013/03/17 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
node-red File读取好保存实例讲解
2019/09/11 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
详解Python装饰器由浅入深
2016/12/09 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
Python格式化输出%s和%d
2018/05/07 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
Django如何使用redis作为缓存
2020/05/21 Python
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
优秀中专生推荐信
2013/11/17 职场文书
海南地接欢迎词
2014/01/14 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
超市中秋节促销方案
2014/03/21 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
司法局火灾防控方案
2014/06/05 职场文书
暑假安全保证书
2015/02/28 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书