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 相关文章推荐
Javascript-Mozilla和IE中的一个函数直接量的问题
Jan 09 Javascript
基于jquery的button默认enter事件(回车事件)。
May 18 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
javascript实现详细时间提醒信息效果的方法
Mar 11 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
Aug 05 Javascript
轻松搞定jQuery.noConflict()
Feb 15 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 jQuery
JavaScript实现获取远程的html到当前页面中
Mar 26 Javascript
html5+canvas实现支持触屏的签名插件教程
May 08 Javascript
Bootstrap Table使用整理(二)
Jun 09 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
Sep 21 jQuery
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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
php 操作符与控制结构
2012/03/07 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
Python ftp上传文件
2016/02/13 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
详解Python用户登录接口的方法
2019/04/17 Python
Python2与Python3的区别点整理
2019/12/12 Python
Python的pygame安装教程详解
2020/02/10 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
高三毕业生自我鉴定
2013/12/20 职场文书
便利店的创业计划书
2014/01/15 职场文书
小学教师评语大全
2014/04/23 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
cf战队宣传语
2015/07/13 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
python如何为list实现find方法
2022/05/30 Python