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实现点击同时更改两个iframe的网址
Jul 01 Javascript
javascript整除实现代码
Nov 23 Javascript
JS注释所产生的bug 即使注释也会执行
Nov 19 Javascript
js QQ客服悬浮效果实现代码
Dec 12 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
JS实现复选框的全选和批量删除功能
Apr 05 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
Bootstrap实现翻页效果
Nov 27 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
Dec 30 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
js实现简单掷骰子效果
Oct 24 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
使用无限生命期Session的方法
2006/10/09 PHP
常用的php ADODB使用方法集锦
2008/03/25 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
剖析Python的Twisted框架的核心特性
2016/05/25 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
python3实现随机数
2018/06/25 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
表彰大会策划方案
2014/05/13 职场文书
赔偿协议书范本
2014/09/12 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python