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入门——事件切换之hover()方法应用介绍
Feb 05 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
May 17 Javascript
AngularJS中$watch和$timeout的使用示例
Sep 20 Javascript
微信小程序 用户数据解密详细介绍
Jan 09 Javascript
AngularJS监听路由变化的方法
Mar 07 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
关于Angularjs中跨域设置白名单问题
Apr 17 Javascript
node.js自动上传ftp的脚本分享
Jun 16 Javascript
vue.js this.$router.push获取不到params参数问题
Mar 03 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实现的MySQL数据浏览器
2007/03/11 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
PHP7内核之Reference详解
2019/03/14 PHP
$()JS小技巧
2007/07/21 Javascript
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
原生js二级联动效果
2017/06/20 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
python中的列表推导浅析
2014/04/26 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
详解Python3注释知识点
2019/02/19 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
python中使用np.delete()的实例方法
2021/02/01 Python
python 将Excel转Word的示例
2021/03/02 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
财务工作者先进事迹材料
2014/01/17 职场文书
省三好学生申请材料
2014/01/22 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
安全口号大全
2014/06/21 职场文书
反邪教标语
2014/06/23 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
浅谈pytorch中的dropout的概率p
2021/05/27 Python
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android