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 checkbox(复选框) 使用集锦
Apr 28 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
Apr 01 Javascript
JS定时器实例详细分析
Oct 11 Javascript
js 本地预览的简单实现方法
Feb 18 Javascript
JS实现让访问者自助选择网页文字颜色的方法
Feb 24 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
浅谈Fetch 数据交互方式
Dec 20 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 Javascript
Vue axios 跨域请求无法带上cookie的解决
Sep 08 Javascript
js制作提示框插件
Dec 24 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
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python复制文件操作实例详解
2015/11/10 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
Django框架视图介绍与使用详解
2019/07/18 Python
python命令 -u参数用法解析
2019/10/24 Python
python 实现多维数组转向量
2019/11/30 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
宣传口号大全
2014/06/16 职场文书
四年级小学生评语
2014/12/26 职场文书
意向协议书
2015/01/27 职场文书
公司开业主持词
2015/07/02 职场文书
2015新教师教学工作总结
2015/07/22 职场文书