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 live( type, fn ) 委派事件实现
Oct 11 Javascript
js异常捕获方法介绍
Apr 10 Javascript
javascript中hasOwnProperty() 方法使用指南
Mar 09 Javascript
详解AngularJS中的http拦截
Feb 09 Javascript
es6学习之解构时应该注意的点
Aug 29 Javascript
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
详解Vue 动态组件与全局事件绑定总结
Nov 11 Javascript
详解vue后台系统登录态管理
Apr 02 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
javascript实现简单搜索功能
Mar 26 Javascript
详解Javascript实践中的命令模式
May 05 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
第十四节--命名空间
2006/11/16 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python获取指定时间差的时间实例详解
2017/04/11 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
一套Java笔试题
2016/08/20 面试题
乒乓球兴趣小组活动总结
2014/07/08 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript