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 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
jQuery使用$.ajax提交表单完整实例
Dec 11 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
Vue拖拽组件列表实现动态页面配置功能
Jun 17 Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 Javascript
小程序input数据双向绑定实现方法
Oct 17 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
JS Object构造函数之Object.freeze
Apr 28 Javascript
React Native项目框架搭建的一些心得体会
May 28 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中ADODB类详解
2008/03/25 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
php设计模式 Observer(观察者模式)
2011/06/26 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
JS表单传值和URL编码转换
2018/03/03 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
Python模拟登陆实现代码
2017/06/14 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
科研先进个人典型材料
2014/01/31 职场文书
婚礼秀策划方案
2014/05/19 职场文书
工会主席事迹材料
2014/06/03 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
国际贸易实训报告
2014/11/05 职场文书
独生子女证明范本
2015/06/19 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书