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 相关文章推荐
Prototype1.5 rc2版指南最后一篇之Position
Jan 10 Javascript
关于textarea提交的内容无法换行的解决办法
Apr 09 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
JavaScript中三种异步上传文件方式
Mar 06 Javascript
JavaScript拖动层Div代码
Mar 01 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
深入理解vue-router之keep-alive
Aug 31 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
详解vue页面首次加载缓慢原因及解决方案
Nov 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实现的随机广告显示代码
2007/06/14 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
js倒计时显示实例
2016/12/11 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
原生JS进行前后端同构
2018/04/22 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
python访问sqlserver示例
2014/02/10 Python
python根据距离和时长计算配速示例
2014/02/16 Python
Python操作MySQL简单实现方法
2015/01/26 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
PHP如何去执行一个SQL语句
2016/03/05 面试题
高中运动会入场词
2014/02/14 职场文书
免职证明样本
2014/10/23 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书