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 相关文章推荐
JQuery 获取和设置Select选项的代码
Feb 07 Javascript
jQuery修改CSS伪元素属性的方法
Jul 30 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
Oct 26 Javascript
JS实现字符串转日期并比较大小实例分析
Dec 09 Javascript
Ajax与服务器(JSON)通信实例代码
Nov 05 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
Mar 17 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
详解在Angularjs中ui-sref和$state.go如何传递参数
Apr 24 Javascript
vue引入jq插件的实例讲解
Sep 12 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
详解vue挂载到dom上会发生什么
Jan 20 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 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通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
js实现分割上传大文件
2016/03/09 Javascript
js css自定义分页效果
2017/02/24 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
python实现连续图文识别
2018/12/18 Python
在python里从协程返回一个值的示例
2019/02/19 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
wxpython绘制音频效果
2019/11/18 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
太太口服液广告词
2014/03/20 职场文书
学生会部长竞聘书
2014/03/31 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
敬老月活动总结
2014/08/28 职场文书
承诺书样本
2014/08/30 职场文书
个人委托书范本
2014/09/13 职场文书
教师创先争优承诺书
2015/04/27 职场文书
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js
Apache自带的ab压力测试工具的实现
2022/07/23 Servers