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 相关文章推荐
表单填写时用回车代替TAB的实现方法
Oct 09 Javascript
基于jquery的拖动布局插件
Nov 25 Javascript
jquery.qrcode在线生成二维码使用示例
Aug 21 Javascript
JS的参数传递示例介绍
Feb 08 Javascript
jquery防止重复执行动画避免页面混乱
Apr 22 Javascript
5种处理js跨域问题方法汇总
Dec 04 Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
Aug 22 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
JS实现瀑布流效果
Mar 07 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
Mar 21 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编程函数安全篇
2013/01/08 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
Prototype使用指南之range.js
2007/01/10 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Python切片知识解析
2016/03/06 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
营销专业应届生求职信
2013/11/26 职场文书
教师党员承诺书
2014/03/25 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
php引用传递
2021/04/01 PHP
MYSQL 运算符总结
2021/11/11 MySQL