一、mongoose概念
Mongoose是NodeJS的驱动,不能作为其他语言的驱动。
- 通过关系型数据库的思想来设计非关系型数据库
- 基于mongodb驱动,简化操作
Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model: 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
Entity:由Model创建的实体,他的操作也会影响数据库
二、mongoose连接/断开数据库
let mongoose = require('mongoose'); //引用mongoose模块
mongoose.connect('mongodb://username:password@host:port/database?options...');//connect()最简单的使用方式
let db = mongoose.connection;
db.on('error', function (err) {
//错误操作
});
db.once('open', function () {
//成功操作
});
mongoose.disconnect(function(){
console.log("断开连接");
})
connect()其他使用方式
mongoose.connect(uri, options);
options
db -数据库设置
server -服务器设置
replset -副本集设置
user -用户名
pass -密码
auth -鉴权选项
mongos -连接多个数据库
更多选项访问[1]
三、Schema
- 创建一个Schema
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
name: String,
binary: Buffer,
living: Boolean,
updated: { type: Date, default: Date.now },
age: { type: Number, min: 18, max: 65 },
mixed: Schema.Types.Mixed,
_someId: Schema.Types.ObjectId,
decimal: Schema.Types.Decimal128,
array: [],
ofString: [String],
ofNumber: [Number],
ofDates: [Date],
ofBuffer: [Buffer],
ofBoolean: [Boolean],
ofMixed: [Schema.Types.Mixed],
ofObjectId: [Schema.Types.ObjectId],
ofArrays: [[]],
ofArrayOfNumbers: [[Number]],
nested: {
stuff: { type: String, lowercase: true, trim: true }
}
})
- 所有Schema的Types
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- Objectid
- Array
- Decimal128
- Schema其它选项
-
required
:boolean or function,如果为true,则属性必须存在 -
default
:Any or function,为路径设置默认值。如果该值是一个函数,则函数的返回值将用作默认值。 -
select
:boolean,指定查询的默认投影 -
validate
:function,为此属性添加验证 -
get
:function,为此属性使用定义一个自定义getter -
set
:function,为此属性使用定义一个自定义setter -
alias
:string。在gets/sets中常用
var numberSchema = new Schema({
integerOnly: {
type: Number,
get: v => Math.round(v),
set: v => Math.round(v),
alias: 'i'
}
});
var Number = mongoose.model('Number', numberSchema);
var doc = new Number();
doc.integerOnly = 2.001;
doc.integerOnly; // 2
doc.i; // 2
doc.i = 3.001;
doc.integerOnly; // 3
doc.i; // 3
- 如果为索引时,还有
-
index
: boolean,是否在此属性上定义索引。 -
unique
: boolean,是否在此属性上定义唯一索引。 -
sparse
: boolean, 是否在此属性上定义稀疏索引。
- String,还有
-
lowercase
: boolean, 是否始终对该值调用.toLowerCase()
-
uppercase
: boolean, 是否始终对该值调用.toUpperCase()
-
trim
: boolean, 是否始终对该值调用.trim()
-
match
: RegExp,创建一个验证器,用于检查值是否与给定的正则表达式匹配 -
enum
: Array,创建一个验证器,检查值是否在给定的数组中。
- Number,还有
-
min
: Number -
max
:Number
- Number,还有
-
min
: Date -
max
: Date