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 相关文章推荐
dojo 之基础篇(三)之向服务器发送数据
Mar 24 Javascript
基于jquery的cookie的用法
Jan 10 Javascript
Jquery post传递数组方法实现思路及代码
Apr 28 Javascript
js获取系统的根路径实现介绍
Sep 08 Javascript
js 高效去除数组重复元素示例代码
Dec 19 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 Javascript
仿iframe效果Aajx文件上传实例
Nov 18 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
Node爬取大批量文件的方法示例
Jun 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
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
vue v-model的用法解析
2020/10/19 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
Python入门篇之列表和元组
2014/10/17 Python
Python进行数据提取的方法总结
2016/08/22 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
如何在Python对Excel进行读取
2020/06/04 Python
python 如何调用远程接口
2020/09/11 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
优秀教师先进事迹
2014/01/22 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
python基础之类属性和实例属性
2021/10/24 Python
MySQL 原理与优化之Update 优化
2022/08/14 MySQL