node.js利用mongoose获取mongodb数据的格式化问题详解


Posted in Javascript onOctober 06, 2017

说明

大家都知道在mongodb 中获取数据,不管使用回调函数还是Promise又或者generate 语法最后得到都是mongoose.Query对象,不能直接操作如同普通对象一样得到单行数据。还有就是时间格式化问题,见下面。

下面示例默认使用co 和 es6 */yield 语法,当然也可以使用async/await

1. 安装mongoose

$ npm install mongoose co moment --save

说明:

  • mongoose: mongodb 的nodejs 数据库驱动
  • co: 一个自动执行的generate函数容器
  • moment: 时间格式化

2. 处理数据

如下代码:

// 省略链接数据库,详情见文档
const mongoose = require('mongoose')
const co = require('co')
const Schema = mongoose.Schema
const PersonSchema = new Schema({
 name: String,
 age: String,
 createAt: {
  type: Date,
  default: Date.now,
  get: v => moment(v).format('YYYY-MM-DD HH:mm')
 }
})

const PersonModel = mongoose.model('Person', PersonSchema) // 创建模型
const Person = new PersonModel() // 创建文档对象
co(function * () {
 let person = yield Person.findOne({name: 'zhengsan'})
 // 这里person 是一个mongoose.Query对象
 // 到这里一般直接使用person 就是一个对象能够获取{ name, type, createAt } 
 // 但是不能够操作这三个,除非单独一个一个复制到另外一个对象,问题就在这里?
})()

这里通过 Object.keys(person)可以得到如下数据:

[ '$__', 'isNew', 'errors', '_doc', '$init' ]

3. 得到普通对象

通过查询mongoose 文档最后得到解决办法而且,可以轻松格式化哦:

// 接上面代码
let person = yield Person.findOne({name: 'zhangsan'})
person = person.toJSON({getters: true})
// 此时person对象对象
// { name: 'zhengsan', age: 32, createAt: '2017-02-03 12:30' }

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
区分JS中的undefined,null,"",0和false
Mar 08 Javascript
有效的捕获JavaScript焦点的方法小结
Oct 08 Javascript
ExtJS DOM元素操作经验分享
Aug 28 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
关于Iframe父页面与子页面之间的相互调用
Nov 22 Javascript
Node.js利用断言模块assert进行单元测试的方法
Sep 28 Javascript
详解处理Vue单页面应用SEO的另一种思路
Nov 09 Javascript
node.js中http模块和url模块的简单介绍
Oct 06 #Javascript
你应该知道的几类npm依赖包管理详解
Oct 06 #Javascript
vue-cli构建项目使用 less的方法
Oct 04 #Javascript
浅谈Angular2 模块懒加载的方法
Oct 04 #Javascript
浅谈angular2路由预加载策略
Oct 04 #Javascript
浅谈Angular路由复用策略
Oct 04 #Javascript
React-Native之定时器Timer的实现代码
Oct 04 #Javascript
You might like
常用的php ADODB使用方法集锦
2008/03/25 PHP
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
php的hash算法介绍
2014/02/13 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
详解php反序列化
2020/06/10 PHP
页面中js执行顺序
2009/11/09 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
Python 专题三 字符串的基础知识
2017/03/19 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
python相对企业语言优势在哪
2020/06/12 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
阿波罗盒子:Apollo Box
2017/08/14 全球购物
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
大学生简单自荐信
2013/11/10 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
市场部经理岗位职责
2014/04/10 职场文书
有关环保的标语
2014/06/13 职场文书
革命电影观后感
2015/06/18 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python