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 相关文章推荐
JavaScript replace(rgExp,fn)正则替换的用法
Mar 04 Javascript
JQuery入门—编写一个简单的JQuery应用案例
Jan 03 Javascript
通过length属性判断jquery对象是否存在
Oct 18 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
vue.js删除动态绑定的radio的指定项
Jun 02 Javascript
VUE中的无限循环代码解析
Sep 22 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
vue实现鼠标移入移出事件代码实例
Mar 27 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
Jul 29 Javascript
jQuery实现聊天对话框
Feb 08 jQuery
js 数组当前行添加数据方法详解
Jul 28 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
javascript定时保存表单数据的代码
2011/03/17 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
python根据路径导入模块的方法
2014/09/30 Python
Python类的专用方法实例分析
2015/01/09 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
开办化妆品公司创业计划书
2013/12/26 职场文书
人事部主管岗位职责
2013/12/26 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
2014年网管工作总结
2014/12/11 职场文书
捐资助学感谢信
2015/01/21 职场文书
vue实力踩坑之push当前页无效
2022/04/10 Vue.js