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+php实现搜索框自动提示
Nov 28 Javascript
jQuery及JS实现循环中暂停的方法
Feb 02 Javascript
js实现图片和链接文字同步切换特效的方法
Feb 20 Javascript
chrome调试javascript详解
Oct 21 Javascript
浅析jQuery Mobile的初始化事件
Dec 03 Javascript
jquery删除数组中重复元素
Dec 05 Javascript
js 原型对象和原型链理解
Feb 09 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
Web开发使用Angular实现用户密码强度判别的方法
Sep 27 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 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自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
Python输出各行命令详解
2018/02/01 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python机器学习之神经网络实现
2018/10/13 Python
Python闭包思想与用法浅析
2018/12/27 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
python实现代码统计程序
2019/09/19 Python
softmax及python实现过程解析
2019/09/30 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python多维数组分位数的求取方式
2020/03/03 Python
Python验证码截取识别代码实例
2020/05/16 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
活动总结格式范文
2014/04/26 职场文书
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫