1. 什么是 mongoose
Mongoose 是在 node.js 环境下对 mongodb 进行便捷操作的对象模型工具
2. 安装
依赖 nodejs 和 mongodb
npm install mongoose –save
require(‘mongoose’)
3. connect 用于创建数据库连接
mongoose.connect(url(s), [options], [callback])
//url(s):数据库地址,可以是多个,以,
隔开
//options:可选,配置参数
//callback:可选,回调
mongoose.connect(‘mongodb://用户名:密码@127.0.0.1:27017/数据库名称’)
连接多个 mongoose.connect(‘urlA,urlB,…’, {mongos : true })
mongoose.disconnect() 断开连接
4. Schema–Each schema maps to a MongoDB collection and defines the shape of the documents within that collection.
主要用于定义 MongoDB 中集合 Collection 里文档 document 的结构,
可以理解为 mongoose 对表结构的定义
(不仅仅可以定义文档的结构和属性,还可以定义文档的实例方法、静态模型方法、复合索引等),
每个 schema 会映射到 mongodb 中的一个 collection,
schema 不具备操作数据库的能力
String 字符串 Number 数字 Date 日期 Buffer 二进制 Boolean 布尔值 Mixed 混合类型 ObjectId 对象 ID Array 数组
如果需要在 Schema 定义后添加其他字段,可以使用 add()方法
5. Model–Models are fancy constructors compiled from Schema definitions. An instance of a model is called a document.
是由 Schema 编译而成的假想(fancy)构造器,具有抽象属性和行为。
Model 的每一个实例(instance)就是一个 document,document 可以保存到数据库和对数据库进行操作。
简单说就是 model 是由 schema 生成的模型,可以对数据库的操作。
实例化文档 document,通过对原型 Model 使用 new 方法,实例化出文档 document 对象
文档保存。必须通过 save()方法,才能将创建的文档保存到数据库的集合中
实例方法和静态方法.区别在于,静态方法是给 model 添加方法,实例方法是给 document 添加方法
Mongoose 会将集合名称设置为模型名称的小写版。如果名称的最后一个字符是字母,则会变成复数;如果名称的最后一个字符是数字,则不变
6. Documents–Each document is an instance of its Model. 7. 文档新增
实例化 model,然后 save()
使用模型 model 的 create()方法,Model.create(doc(s), [callback])
最后一种是模型 model 的 insertMany()方法,Model.insertMany(doc(s), [options], [callback])
8. 文档查询
find()
第一个参数表示查询条件,第二个参数用于控制返回的字段,第三个参数用于配置查询参数,第四个参数是回调函数
Model.find(conditions, [projection], [options], [callback])
findById()
Model.findById(id, [projection], [options], [callback])
findOne()
文档查询中,常用的查询条件如下 (Query and Projection Operators)
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于 LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于 LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于 LBS)
$box 范围查询,矩形范围(基于 LBS)
$center 范围醒询,圆形范围(基于 LBS)
$centerSphere 范围查询,球形范围(基于 LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第 N 到第 M 个元素
9. 文档更新
Model.update(conditions, doc, [options], [callback])
第一个参数 conditions 为查询条件,第二个参数 doc 为需要修改的数据,第三个参数 options 为控制选项,第四个参数是回调函数
options 有如下选项
safe (boolean): 默认为 true。安全模式。
upsert (boolean): 默认为 false。如果不存在则创建新记录。
multi (boolean): 默认为 false。是否更新多个查询记录。
runValidators: 如果值为 true,执行 Validation 验证。
setDefaultsOnInsert: 如果 upsert 选项为 true,在新建时插入文档定义的默认值。
strict (boolean): 以 strict 模式进行更新。
overwrite (boolean): 默认为 false。禁用 update-only 模式,允许覆盖记录。
updateMany()与 update()方法唯一的区别就是默认更新多个文档,即使设置{multi:false}也无法只更新第一个文档
如果需要更新的操作比较复杂,可以使用 find()+save()方法来处理
updateOne()方法只能更新找到的第一条数据,即使设置{multi:true}也无法同时更新多个文档
findOne() + save()
Model.findOneAndUpdate([conditions], [update], [options], [callback])
Model.findByIdAndUpdate([conditions], [update], [options], [callback])
操作符 Update Operators
10. 文档删除
remove
model.remove(conditions, [callback])
document.remove([callback])
Model.findOneAndRemove(conditions, [options], [callback])
Model.findByIdAndRemove(id, [options], [callback])
11. 查询后处理
sort 排序 按某字段排序
skip 跳过 做任何操作前跳过若干
limit 限制 规定最大返回数量
select 显示字段 规定显示的字段
count 计数 计数查询结果
distinct 去重 统计某字段值的情况
exect 执行 执行最终查询
12. 文档验证
Validation is defined in the SchemaType 定义在 schema 中
Validation is middleware. Mongoose registers validation as a pre(‘save’) hook on every schema by default.中间件,默认注册了 pre(‘save’) 钩子
You can manually run validation using doc.validate(callback) or doc.validateSync() 可手动运行
Validators are not run on undefined values. The only exception is the required validator. 未定义值不会校验
Validation is asynchronously recursive; when you call Model#save, sub-document validation is executed as well. If an error occurs, your Model#save callback receives it 嵌套异步执行
Validation is customizable 自定义
规则
required: 数据必须填写
default: 默认值
validate: 自定义匹配
min: 最小值(只适用于数字)
max: 最大值(只适用于数字)
match: 正则匹配(只适用于字符串)
enum: 枚举匹配(只适用于字符串)
Newer
微信公众平台-微信JS-SDK接入
Older
在linux从0搭建node环境
Home
Archives