Mongoose模式的扩展
模式的扩展
默认值
默认值的类型:
固定值、即使生成
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
appleName : {
type : String,
default : '江苏红果'
},
madeTime : {
type : Date,
default : Date.now //new Date()
}
});
var Apple = mongoose.model('Apple',AppleSchema);
var apple1 = new Apple();
console.log('User:',apple1);
模式修饰符
类型:
预定义的模式修饰符、自定义的setter修饰符、自定义的getter修饰符
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
appleName : {
type : String,
default : ' 江苏红果 ',
trim : true
},
madeTime : {
type : Date,
default : Date.now //new Date()
},
address : {
type : String,
/*set : function(url){
if(!url){
return ;
}
if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
url = 'http://' + url;
}
return url;
},*/
get : function(url){
if(!url){
return ;
}
if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
url = 'http://' + url;
}
return url;
}
}
});
var Apple = mongoose.model('Apple',AppleSchema);
/*var Apple = mongoose.model('Apple',{
appleName : {
type : String,
trim : true
},
address : {
type : String,
set : function(url){
if(!url){
return ;
}
if(-1 === url.indexOf('http://')&& -1 === url.indexOf('https://')){
url = 'http://' + url;
}
return url;
}
}
});*/
var apple1 = new Apple({
appleName : ' 江苏红果 ',
address : 'baidu.com'
});
/*apple1.save(function(err){
if(err){
return '保存出错了!';
}
});*/
Apple.find(function(err,docs){
if(err){
return '查找失败了!';
}
console.log('数据库里面的数据为:',docs);
});
console.log('apple1为:',apple1.address);
//default是schema里面特有的
虚拟属性
实现方式:
Schema.virtual()
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
firstName : String,
lastName : String
});
AppleSchema.virtual('fullName').get(function(){
return this.firstName + '' + this.lastName;
});
AppleSchema.set('toJSON',{getters : true,virtual : true});
var Apple = mongoose.model('Apple',AppleSchema);
var apple1 = new Apple({
firstName : 'app',
lastName : 'le'
});
console.log('apple fullName:',apple1.fullName);
console.log('JSON:',JSON.stringify(apple1));
索引
索引:
唯一索引、辅助索引 //辅助索引 增加查询速度
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
code : {
type : Number,
unique : true //唯一索引
},
name : {
type : String,
index : true //辅助索引
}
});
模型的方法
方法的分类
自定义静态方法、自定义实例方法
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var AppleSchema = new mongoose.Schema({
code : {
type : Number,
},
name : {
type : String,
}
/*code : Number,
name : String*/
});
/*
静态方法
*/
AppleSchema.statics.findByCode = function(code,cb){
this.findOne({code:code},function(err,doc){
cb(err,doc);
});
};
/*
实例方法
*/
AppleSchema.methods.print = function(){
console.log('appleName:',this.name);
};
var Apple = mongoose.model('Apple',AppleSchema);
var apple = new Apple({
code : 1,
name : '江苏红果'
});
/*apple.save(function(err){
if(err){
return err;
}
Apple.findByCode(1,function(err,doc){
console.log("静态方法打印的结果为:",doc);
})
});*/
/*Apple.find(function(err,doc){
console.log("doc为:",doc);
});*/
apple.print();
数据的校验
预定义的验证器:
required、Number(max,min)、String(enum,match)
自定义的验证器:
validate
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var OrderSchema = new mongoose.Schema({
count : {
type : Number,
//必须有值
required : true,
//最大值
max : 1000,
//最小值
min : 10
},
intro : {
type : String,
//枚举类型
enum : ['优','良','一般','差','特别差']
},
phone : {
type : String,
//正则验证
match : /135/g,
//自定义验证器
validate : function(phone){
return phone.length>10;
}
},
});
mongoose.model('Order',OrderSchema);
var Order = mongoose.model('Order');
var order = new Order({
count : 1000,
intro : '优',
phone : '12567891350'
});
//order.count = 1;
order.save(function(err){
if(err){
return console.log('保存出错了!',err);
}
console.log('保存成功');
});
中间件
类型:
文档中间件(init、validate、save、remove),查询中间件(count、find、findOne、findOneAndRemove、findOneAndUpdate、update)
预处理中间件
后置处理中间件
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test1');
var ResultSchema = new mongoose.Schema({
address : String
});
//预处理中间件
ResultSchema.pre('save',true,function(next,done){
console.log('执行预处理中间件!');
next();
done();
});
//后置处理中间件
ResultSchema.post('save',function(next){
console.log('执行后置处理中间件!',next);
next();
})
mongoose.model('Result',ResultSchema);
var Result = mongoose.model('Result');
var result = new Result();
result.address = 'I am in GuangZhou';
result.save();
DBRef
DBRef的定义://相当于数据库里面表与表之间的联合查询,关联关系
populate()
代码展示:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test5');
var UserSchema = new mongoose.Schema({
name : String
});
var BookSchema = new mongoose.Schema({
title : String,
author : {
type : mongoose.Schema.ObjectId,
ref : 'User'
}
});
mongoose.model('User',UserSchema);
mongoose.model('Book',BookSchema);
var User = mongoose.model('User');
var Book = mongoose.model('Book');
var user = new User({
name : '张三'
});
var book = new Book({
title : '鬼故事',
author : user
});
user.save(function(err){
if(err) return console.log('作者保存失败!err=',err);
/*book.save(function(err){
if(err) return console.log('图书保存失败!err=',err);
});
Book.find().populate('author').exec(function(err,docs){
console.log('信息为:',err,docs);
});*/
BookSchema.post('save',function(next){
Book.find().populate('author').exec(function(err,docs){
if(err) return console.log(err);
console.log('保存成功后,查询的结果为:',docs);
});
});
book.save(function(err){
if(err) return console.log(err);
console.log('图书信息保存成功!');
});
});
Mongoose模式的扩展的更多相关文章
- C#编程模式之扩展命令
C#编程模式之扩展命令 前言 根据上一篇的命令模式和在工作中遇到的一些实际情况,有了本篇文章,时时都是学习的一个过程,会在这个过程中发现许多好的模式或者是一种开发方式,今天写出来的就是我工作中常用到的 ...
- Mozilla Firefox 将获得包含 Tor 模式的扩展组件
据外媒报道,Firefox 浏览器可能很快就会收到一个 Tor 模式的附加组件,它将通过连接 Tor 网络显著增强隐私功能.虽然 Mozilla 和 Tor 团队的最终目标是在浏览器上实现完整功能的 ...
- Nodejs----学习路线
一:javascript基础 1.语法 2.数据类型 3.操作符 4.语句 5.函数 6.变量 7.Object 类型 8.基本包装类型 9.Global 对象 10.Math 对象 11.初始化和检 ...
- Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战
一. 前言 [APP 移动端]Spring Security OAuth2 手机短信验证码模式 [微信小程序]Spring Security OAuth2 微信授权模式 [管理系统]Spring Se ...
- 使用读写分离模式扩展 Grafana Loki
转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500127&idx=1&sn=995987d558 ...
- mongoose 开源http库
Mongoose是一个用C编写的网络库.它为客户端和服务器模式实现TCP,UDP,HTTP,WebSocket,CoAP,MQTT的事件驱动的非阻塞API. 设计理念: Mongoose有三个基本的数 ...
- Mongoose使用
文章来自 Mongoose基础入门 Mongoose的API Mongoose模式扩展 指南之查询 指南之验证 mongoose方法很多,很乱,版本不一样,有些方法可能都过时了,所以整理了很久 连接数 ...
- 用Lua扩展谷歌拼音输入法
谷歌拼音输入法最后一次更新是2013年,最近2年毫无动静,这个产品应该已经停了,不过这并不影响对它的使用,我一直喜欢它的简洁和稳定. 说不上来什么原因,忽然想起了摆弄摆弄谷歌拼音输入法的扩展特性(我经 ...
- 再谈扩展方法,从string.IsNullOrEmpty()说起
string.IsNullOrEmpty()这个方法算得上是.net中使用频率最高的方法之一.此方法是string的一个静态方法,类似的静态方法在string这个类中还有很多.那么这样的方法作为静态方 ...
随机推荐
- SQL Server 2012安装配置(Part2 )
2 服务器安装 运行安装程序后,首先进入 SQL Server 安装中心.选择左侧导航树中的"安装"菜单项. 图2-1 SQL Server 安装中心 在右侧菜单中点击" ...
- 自动驾驶self driving知识点mark
C++, algorithm, RTOS,TX2, CAN, 标准, car model,
- 关于GitHubGit
一.Github项目地址:https://github.com/gyguyt/Helloworld123 二.什么是Github? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或 ...
- python接口测试-项目实践(七)脚本优化
七 脚本优化:重复代码的提取成函数:与项目接口相关的都封装到一个类中:添加手工验证脚本,增加输入值的判断逻辑 将所有与该项目接口相关的封装成类 class ProjectApi: #3个数据源接口 d ...
- bootstrap table 分页只显示分页不显示总页数等数据
搜了下没找到解决方案,就用CSS来解决了. 把paginationDetailHAlign:"right",使pagination-detail的class为.pull-right ...
- Android(java)学习笔记15:匿名内部类实现多线程
1. 使用匿名内部类实现多线程 二话不说,首先利用代码体现出来,给大家直观的感觉: package cn.itcast_11; /* 4 * 匿名内部类的格式: 5 * new 类名或者接口名() { ...
- public class Promise<T>: Thenable, CatchMixin
public class Promise<T>: Thenable, CatchMixin
- System.Chare的成员
实现效果: 知识运用: System.Char的静态方法 (判断一个给定的字符是否为数字 字母 标点符号或其他) 实现效果: static void CharFunctionality() { Con ...
- jmeter自动生成测试报告
环境要求1:jmeter3.0版本之后开始支持动态生成测试报表 2:jdk版本1.7以上 3:需要jmx脚本文件 基本操作 1:在你的脚本文件路径下,执行cmd命令:jmeter -n -t test ...
- 利用Graphviz画出图
graphviz官网:http://www.graphviz.org/ 背景:有画图需要,之前见到别人用graphviz画,画出来的图漂亮,且自动帮你排版安排布局,所以自己想尝试用它画. 其中遇到的几 ...