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实现多级下拉菜单的实例代码
Oct 02 Javascript
json的定义、标准格式及json字符串检验
May 11 Javascript
JavaScript中this的四个绑定规则总结
Sep 26 Javascript
原生JS下拉加载插件分享
Dec 26 Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 Javascript
详解vue2路由vue-router配置(懒加载)
Apr 08 Javascript
node通过express搭建自己的服务器
Sep 30 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
Oct 15 Javascript
详解weex默认webpack.config.js改造
Jan 08 Javascript
vue.js移动数组位置,同时更新视图的方法
Mar 08 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
JS实现字体背景跑马灯
Jan 06 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执行速度全攻略(上)
2006/10/09 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python实现的双色球生成功能示例
2017/12/18 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
农救科工作职责
2013/11/27 职场文书
小学生学习保证书
2015/02/26 职场文书
2015年安全月活动总结
2015/03/26 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
使用Django框架创建项目
2022/06/10 Python