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 相关文章推荐
JS BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
初学Javascript的一些总结
Nov 03 Javascript
JQuery学习笔记 nt-child的使用
Jan 17 Javascript
js三种排序算法分享
Aug 16 Javascript
javaScript NameSpace 简单说明介绍
Jul 18 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
Sep 24 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
Apr 01 Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 Javascript
jquery把int类型转换成字符串类型的方法
Oct 07 Javascript
Koa 使用小技巧(小结)
Oct 22 Javascript
Angular6 用户自定义标签开发的实现方法
Jan 08 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 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的php程序
2007/04/07 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
js数组的操作详解
2013/03/27 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
连接Python程序与MySQL的教程
2015/04/29 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
创建服务型党组织实施方案
2014/02/25 职场文书
情况说明书格式范文
2014/05/06 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
青年文明号汇报材料
2014/12/23 职场文书