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 ajax执行后台方法
Mar 18 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
jquery分页对象使用示例
Apr 01 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 Javascript
解析javascript瀑布流原理实现图片滚动加载
Mar 10 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
Mar 28 Javascript
JSON字符串和对象相互转换实例分析
Jun 16 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 Javascript
AjaxUpLoad.js实现文件上传
Mar 05 Javascript
原生JS无缝滑动轮播图
Oct 22 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
二招解决php乱码问题
2012/03/25 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
EsLint入门学习教程
2017/02/17 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
python类继承用法实例分析
2014/10/10 Python
Python实现购物车程序
2018/04/16 Python
python 字符串和整数的转换方法
2018/06/25 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
校园新闻广播稿
2014/01/10 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript
Go获取两个时区的时间差
2022/04/20 Golang