2019独角兽企业重金招聘Python工程师标准>>>

之见到我写点啥简直是奇迹,由于现在喜欢上玩转node.js +mongoose,个人爱好,靠近前端的又是英文文档,苦逼得很,悟出来一个写一个吧。之前喜欢误打误撞,网上搜索一点解决一下问题,后来实在难看得很,为啥,解决一个小问题又来大问题,刚解决完大问题,有来巨大的bug,所有必需系统的学习,就算爱折腾也得有点头绪,决定先认真看完文档再说吧,免得想开发点啥都折腾得没有兴趣了……。

首先我们得知道Schema常用的有哪些数据类型,不能只知道需要一个见一个就用一个,这样会感觉一直在摸索中探寻,不能把握全局。

Schema.Types

  • String  字符串
  • Number 数字,什么int啊,float啊,double啊,都只有这个Number就哦了
  • Boolean | Bool
  • Array 数组
  • Buffer 二进制
  • Date 日期
  • ObjectId | Oid mongodb主键一般都是用{_id:Schema.Types.objectId}
  • Mixed 这个强大,混合型的,也就是当你不确定这个属性存什么的时候设置为它吧,如果在被确立类型赋值后,需要用到一个函数来通知修改这个类型。下文会讲到。
    如何定义使用呢,请往下看:

    var mongoose = require('mongoose');
    var ObjectId = mongoose.Schema.Types.ObjectId;

    当然可以简略使用,请看如下定义

//定义children的子嵌套
var child = new Schema({ name: String });
//添加字段方式1
var schema = new Schema({ name: String, age: Number, children: [child]});
//添加字段方式2
//var schema = new Schema;
//    schema.add({name :String, age: Number, children: [child] });var Tree = mongoose.model('Tree', schema);
// 设置 schema 选项
new Schema({ name: String }, { _id: false, autoIndex: false })

重点讲的就是,我们在定义嵌套文档是一般都不需要自动生成的_id,和索引对不?我们只要在Schema的第二个参数里设置下即可:
    _id:false或者_id:0,禁止自动生成主键
    autoIndex:false 或者autoIndex:0 禁止自动创建索引
    对了 false可以用数字0表示,true嘛你懂的。还有跟多的选项供你按需使用。一大串。

Options: 其他可选项

  • autoIndex: bool - 默认 true
  • bufferCommands: bool - 默认 true
  • capped: bool - 默认 false
  • collection: string - 无
  • id: bool - 默认 true
  • _id: bool - 默认 true
  • minimize: bool - controls document#toObject behavior when called manually - 默认 true
  • read: string
  • safe: bool - 默认 true.
  • shardKey: bool - 默认 null
  • strict: bool - 默认 true
  • toJSON - object - 无
  • toObject - object - 无
  • versionKey: bool - 默认 "__v" 这玩意儿有些讨厌,会自动在数据库里生成这个字段,最好禁用。

Schema#method(method, [fn])

这个method方法很不错,当我们增删查改完想返回必要数据是可以交给此方法来做。如果一个方法的时候在method第一个参数设定方法名字符串,第二个参数为回调函数,如下:

var schema = kittySchema = new Schema(..);schema.method('meow', function () {console.log('meeeeeoooooooooooow');
})var Kitty = mongoose.model('Kitty', schema);var fizz = new Kitty;
fizz.meow(); // meeeeeooooooooooooow

如果多个方法的时候,可以同时绑定,如下来使用。当然你也可以一个一个的如上面的列子来写。

schema.method({purr: function () {}, scratch: function () {}
});// later
fizz.purr();
fizz.scratch();

Schema#path(path, constructor)

这个path方法用于修改属性的类型,原来已经定义好的属性name的Schema类型为String,要改成Number就这样使用。

schema.path('name', Number) //修改name的数据类型

如果要获取这个属性的数据类型,使用

schema.path('name') // 返回一个 Schema的类型

Schema#post(method, fn)

对于这个方法,用处在于把自定义的处理方法添加到event  emitter事件循环上去,给shema注册事件并能接收model处理后返回的文档,使用model实例来调用。

var schema = new Schema(..);
schema.post('save', function (doc) {console.log('this fired after a document was saved');
});var Model = mongoose.model('Model', schema);var m = new Model(..);
m.save(function (err) {console.log('this fires after the `post` hook');
});

Schema#static(name, fn)

注册静态方法,用实例直接调用,不需要再new一下了

var schema = new Schema(..);
schema.static('findByName', function (name, callback) {return this.find({ name: name }, callback);
});var Drink = mongoose.model('Drink', schema);
Drink.findByName('sanpellegrino', function (err, drinks) {//
});

转载于:https://my.oschina.net/antianlu/blog/180104

mongoose 之Shema相关推荐

  1. [转] mongoose 之Shema

    总 之见到我写点啥简直是奇迹,由于现在喜欢上玩转node.js +mongoose,个人爱好,靠近前端的又是英文文档,苦逼得很,悟出来一个写一个吧.之前喜欢误打误撞,网上搜索一点解决一下问题,后来实在 ...

  2. 白塞尔公式_如何设计像乌塞尔这样的800人的婚礼

    白塞尔公式 As a design enthusiast, I've always dreamed about designing my "Yes I do" scene. Fin ...

  3. Mongoose模块

    一.Mongoose Mongoose是在node.js环境中对MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为JavaScript对象供我们使用. 1.名词解释 Sche ...

  4. node.js(node.js+mongoose小案例)_实现简单的注册登录退出

    一.前言 通过node.js基本知识对node.js基本知识的一个简单应用 1.注册 2.登录 3.退出 二.基本内容 1.项目结构搭建如图所示 2.这个小案列中用到了art-template子模板以 ...

  5. mongoose手动生成ObjectId

    如果需要手动生成使用mongoose.Types.ObjectId()方法. var mongoose = require('mongoose'); var id = mongoose.Types.O ...

  6. mongoose简单使用

    介绍&安装 官网:http://www.mongoosejs.net/ npm i -S mongoose 使用 1.连接mongodb&创建模型 var mongoose = req ...

  7. node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序

    node mongoose by Arun Mathew Kurian 通过阿伦·马修·库里安(Arun Mathew Kurian) 如何使用Express,Mongoose和Socket.io在N ...

  8. koa+mongoose基础入门

    1.mongoose基本使用 1.安装mongodb npm install mongodb 2.引入mongodb数据表,连接mongodb,通过node来对mongodb进行异步的增删改查 con ...

  9. mongoose 实用 API 总结

    2019独角兽企业重金招聘Python工程师标准>>> 一.介绍 1. 概述 mongoose 模块用于简化 node 与数据库 mongodb 之间的操作,目的是通过简便的 API ...

最新文章

  1. 有关RDS上只读实例延时分析-同适用于自建MySQL主从延时分析判断
  2. 设计模式之美:Memento(备忘录)
  3. redis日志_「漫画」谈谈Redis持久化
  4. python 调用linux命令-Python Linux系统管理之Python中执行外部命令
  5. 3.12 总结-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  6. 51nod1179【思维】
  7. 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替...
  8. mysql 锁 行级_全局锁、表级锁、行级锁mysql 极客评论笔记
  9. 单例模式 Singleton Pattern
  10. datetime.strptime格式转换报错ValueError
  11. React 事件处理函数
  12. mac android 调试快捷键,Mac Android Studio快捷键整理_IOS_脚本之家
  13. java sequence 生成器_分布式高效唯一ID生成器(sequence)
  14. 基于STM32音频频谱分析设计方案
  15. [微软中国]秋季校园招聘开启了(可内推)
  16. 香蕉树上第二根芭蕉——安装tensorflow中一些问题说明
  17. Apicloud开发新闻类App实战项目-老孟编程
  18. open3d之体素化Voxelization有关函数详情(笔记6)
  19. ERROR c.alibaba.druid.pool.DruidDataSource - init datasource error 运行代码提示数据库连接错误
  20. LAMP环境让php支持pdo_mysql

热门文章

  1. c++/c语言 杨辉三角(详细讲解)。
  2. 小米6刷MIUI12.5(miui12.5)超级详细教程
  3. 什么是异构数据源和分布式数据库
  4. python自学路线——人工智能方向
  5. 带正电荷的脂质体-阳离子脂质体表面修饰
  6. 我经历过的失败产品和项目(二):一款无疾而终的棋牌类游戏
  7. ip地址的分类及地址范围
  8. 微信图文中出现了腾讯视频时,教你弄到不能直接获取的视频原始地址的方法~
  9. oppo三年Android更新,OPPO Find X3系列将提供3年系统更新支持
  10. 算法的时间复杂度取决于: