Open lq782655835 opened 5 years ago
MongoDB是目前最流行的NoSQL数据库之一。MongoDB和Node.js特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和JavaScript语法很像。
在mongodb中基本的概念是数据库、集合、文档。下表将帮助更容易理解Mongodb中的一些概念:
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
db.col.find({}).limit(5).skip(1).sort({"likes":-1})
在mongodb中,Collection类似于传统SQL的table;Document类似于SQL中的一行记录row;Field类似于SQL中的一列column。
Mongoose是在node下对MongoDB进行管理的数据对象模型(ODM)库。它管理着数据结构定义、校验、数据之间的关系,并可以使node数据转换成mongodb数据库数据。
定义document的结构、默认值、校验等。是一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力。支持schema.pre('save', ...)钩子函数(当model.save()执行时触发);支持schema.plugin()以使用自定义插件。
不具备数据库的操作能力
Schema Type支持如下类型:
Schema API
Model是Schema的包装,具有操作数据库的能力。
具有操作数据库的能力
Model API
Schema类似于SQL的表的定义;Model是一个高层次的接口
let mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/test') // 记得先连接到数据库 /** 定义表结构 **/ let emailSchema = new mongoose.Schema({ email: String, date: Date }) // 回调钩子 emailSchema.pre('save', function(next) { if(!this.date) this.date = new Date() // this指向Schema next() }) // 定义Model静态方法 emailSchema.statics.getLeoRows = function() { return this.find({author: 'leo'}) // this指向Model } /** 定义操作层 **/ let EmailModel = mongoose.model('Email', emailSchema) // 静态方法,常用于数据库逻辑 EmailModel.getLeoRows().then(data => console.log(data)) // 新增 let msg = new EmailModel({ email: 'leo' }) msg.save().then(doc => console.log(doc)) // 查询 EmailModel.find({ email: 'leo' }).then(doc => console.log(doc)) // 更新 EmailModel.findOneAndUpdate({ email: 'leo' },{ email: 'leoupdate' }.then(doc => console.log(doc)) // 删除 EmailModel.findOneAndRemove({ email: 'leoupdate'}).then(doc => console.log(doc))
mongoose document
Introduction to Mongoose for MongoDB
MongoDB是目前最流行的NoSQL数据库之一。MongoDB和Node.js特别般配,因为MongoDB是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和JavaScript语法很像。
概念解析
在mongodb中基本的概念是数据库、集合、文档。下表将帮助更容易理解Mongodb中的一些概念:
Command
Mongoose
Mongoose是在node下对MongoDB进行管理的数据对象模型(ODM)库。它管理着数据结构定义、校验、数据之间的关系,并可以使node数据转换成mongodb数据库数据。
Schema
定义document的结构、默认值、校验等。是一种以文件形式存储的数据库模型骨架,
不具备数据库的操作能力
。支持schema.pre('save', ...)钩子函数(当model.save()执行时触发);支持schema.plugin()以使用自定义插件。Schema Type支持如下类型:
Schema API
Model
Model是Schema的包装,
具有操作数据库的能力
。Model API
参考文章
mongoose document
Introduction to Mongoose for MongoDB