模式的扩展

默认值

默认值的类型:

固定值、即使生成

代码展示:    

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模式的扩展的更多相关文章

  1. C#编程模式之扩展命令

    C#编程模式之扩展命令 前言 根据上一篇的命令模式和在工作中遇到的一些实际情况,有了本篇文章,时时都是学习的一个过程,会在这个过程中发现许多好的模式或者是一种开发方式,今天写出来的就是我工作中常用到的 ...

  2. Mozilla Firefox 将获得包含 Tor 模式的扩展组件

    据外媒报道,Firefox 浏览器可能很快就会收到一个 Tor 模式的附加组件,它将通过连接 Tor 网络显著增强隐私功能.虽然 Mozilla 和 Tor 团队的最终目标是在浏览器上实现完整功能的 ...

  3. Nodejs----学习路线

    一:javascript基础 1.语法 2.数据类型 3.操作符 4.语句 5.函数 6.变量 7.Object 类型 8.基本包装类型 9.Global 对象 10.Math 对象 11.初始化和检 ...

  4. Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战

    一. 前言 [APP 移动端]Spring Security OAuth2 手机短信验证码模式 [微信小程序]Spring Security OAuth2 微信授权模式 [管理系统]Spring Se ...

  5. 使用读写分离模式扩展 Grafana Loki

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500127&idx=1&sn=995987d558 ...

  6. mongoose 开源http库

    Mongoose是一个用C编写的网络库.它为客户端和服务器模式实现TCP,UDP,HTTP,WebSocket,CoAP,MQTT的事件驱动的非阻塞API. 设计理念: Mongoose有三个基本的数 ...

  7. Mongoose使用

    文章来自 Mongoose基础入门 Mongoose的API Mongoose模式扩展 指南之查询 指南之验证 mongoose方法很多,很乱,版本不一样,有些方法可能都过时了,所以整理了很久 连接数 ...

  8. 用Lua扩展谷歌拼音输入法

    谷歌拼音输入法最后一次更新是2013年,最近2年毫无动静,这个产品应该已经停了,不过这并不影响对它的使用,我一直喜欢它的简洁和稳定. 说不上来什么原因,忽然想起了摆弄摆弄谷歌拼音输入法的扩展特性(我经 ...

  9. 再谈扩展方法,从string.IsNullOrEmpty()说起

    string.IsNullOrEmpty()这个方法算得上是.net中使用频率最高的方法之一.此方法是string的一个静态方法,类似的静态方法在string这个类中还有很多.那么这样的方法作为静态方 ...

随机推荐

  1. C#发送电子邮件 (异步) z

    ///验证电子邮件的正则表达式   string emailStr = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([ ...

  2. P2PSearcher云点播设置和使用技巧

    P2PSearcher是一款基于ED2K网络的资源搜索工具,资源丰富,小巧轻便.资源搜索结果最丰富.智能排序定位精准,立即找到想要的资源.新版可突破服务器封杀限制,一个能用的P2PSearcher.整 ...

  3. 如何证明CRM WebClient UI上的应用是有状态(Stateful)的

    随便找一个在CRM WebClient UI里会被频繁调用到的函数,在函数里创建一个隐式增强,打印当前的会话ID. 不关闭浏览器,在浏览器里不断做操作,可以观察到不管做任何操作,每次断点出发后,打印出 ...

  4. (转)写的非常好的一篇HTTP协议详解

    原文地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html#3931004(推荐看原文,因为原文文章末有更详细链接) 当今 ...

  5. Android(java)学习笔记30:泛型接口的概述和使用

    1. 泛型接口的概述和使用: package cn.itcast_06; /* * 泛型接口:把泛型定义在接口上 */ public interface Inter<T> { public ...

  6. 2018.12.20 Spring环境如何搭建

    Spring学习 1.导入spring约束 为后续创建xml文件做铺垫 2.开始搭建Spring环境 1.创建Web项目,引入spring的开发包(根据下面的图来引入) 2.引入jar包 coreCo ...

  7. 使用maven创建项目

    http://192.168.4.112/rdmanager/main/index.jhtml 1.对于第一次下载某个项目的源码,按照下面的步骤进行: (1)在D:\projects\目录下的空白位置 ...

  8. Ubuntu14.04(或Ubuntu16.04)安装openCV并测试python/C++

    网上关于opencv的安装已经有了不少资料,但是没有一篇资料能让我一次性安装成功,因此花费了大量时间去解决各种意外,希望这篇能给一些人带去便利,节省时间. 1.安装OpenCV所需的库 1 sudo ...

  9. 【luogu P2590 [ZJOI2008]树的统计】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2590 我想学树剖QAQ #include <cstdio> #include <cstri ...

  10. Eclipse插件的卸载和安装

    Eclipse 卸载插件: 右下角会有卸载进度 卸载完后 然后需要重启 Eclipse安装插件 选择本地下载好的插件 点击 Ok 插件下载地址:https://jaist.dl.sourceforge ...