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 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
Jquery插件之打造自定义的select标签
Nov 30 Javascript
利用jquery包将字符串生成二维码图片
Sep 12 Javascript
Javascript基础教程之比较操作符
Jan 18 Javascript
浅谈JavaScript中的Math.atan()方法的使用
Jun 14 Javascript
jQuery Real Person验证码插件防止表单自动提交
Nov 06 Javascript
BootStrap中Tab页签切换实例代码
May 30 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
Oct 21 Javascript
详解jQuery选择器
Dec 21 Javascript
bootstrapValidator表单验证插件学习
Dec 30 Javascript
js实现适合新闻类图片的轮播效果
Feb 05 Javascript
通过webpack引入第三方库的方法
Jul 20 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和ACCESS写聊天室(七)
2006/10/09 PHP
php 操作excel文件的方法小结
2009/12/31 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
vue实现购物车列表
2020/06/30 Javascript
Python 装饰器深入理解
2017/03/16 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Python创建或生成列表的操作方法
2019/06/19 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
3种python调用其他脚本的方法
2020/01/06 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
python爬虫容易学吗
2020/06/02 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
将相和教学反思
2014/02/04 职场文书
趣味运动会广播稿
2015/08/19 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server