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使用手册之 事件处理
Mar 24 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 Javascript
ie下动态加态js文件的方法
Sep 13 Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
Jan 04 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
JS实现的系统调色板完整实例
Dec 21 Javascript
JS实现的表头列头固定页面功能示例
Jan 10 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
Jul 13 Javascript
JavaScript实现短信倒计时60s
Oct 09 Javascript
jQuery封装animate.css的实例
Jan 04 jQuery
JS与SQL方式随机生成高强度密码示例
Dec 29 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导出oracle库的php代码
2009/04/20 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
python滑块验证码的破解实现
2019/11/10 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
高中自我评价范文
2014/01/27 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
AngularJS实现多级下拉框
2022/03/25 Javascript
Python测试框架pytest高阶用法全面详解
2022/06/01 Python
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android