mongoose 是一个对象文档模型(ODM)库
mongoosejs.com/
- 可以为文档创建一个模式结构(Schema)
- 可以对模型中的对象/文档进行验证
- 数据可以通过类型转换转换为对象模型
- 可以使用中间件应用业务逻辑
6.1 mongoose 提供的新对象类型
- Schema
- 定义约束了数据库中的文档结构
- 个人感觉类似于 SQL 中建表时事先规定表结构
- Model
- 集合中的所有文档的表示, 相当于 MongoDB 数据库中的 collection
- Document
- 表示集合中的具体文档, 相当于集合中的一个具体的文档
6.2 简单使用 Mongoose
mongoosejs.com/docs/guide.…
使用 mongoose 返回的是一个 mogoose Query object
, mongoose 执行 query 语句后的结果会被传进 callback 函数 callback(error, result)
A mongoose query can be executed in one of two ways. First, if you pass in a
callback
function, Mongoose will execute the query asynchronously and pass the results to thecallback
.A query also has a
.then()
function, and thus can be used as a promise.
const q = MyModel.updateMany({}, { isDeleted: true }, function() {
console.log("Update 1");
}));
q.then(() => console.log("Update 2"));
q.then(() => console.log("Update 3"));
复制代码
上面这一段代码会执行三次 updateMany()
操作, 第一次是因为 callback, 之后的两次是因为 .then()
(因为 .then()
也会调用 updatemany()
)
连接数据库并且创建 Model 类
const mongoose = require('mongoose');
// test is the name of database, will be created automatically
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});
const Cat = mongoose.model('Cat', { name: String });
const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));
复制代码
监听 MongoDB 数据库的连接状态
在 mongoose 对象中, 有一个属性叫做 connection
, 该对象就表示数据库连接.通过监视该对象的状态, 可以来监听数据库的连接和端口
mongoose.connection.once("open", function() {
console.log("connection opened.")
});
mongoose.connection.once("close", function() {
console.log("connection closed.")
});
复制代码
6.3 Mongoose 的 CRUD
首先定义一个 Schema
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const blogSchema = new Schema({
title: String, // String is shorthand for {type: String}
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
复制代码
然后在 blogSchema
基础上创建 Model
const Blog = mongoose.model('Blog', blogSchema);
// ready to go!
module.exports = Blog;
复制代码
当调用上面这一行代码时, MongoDB 会做如下操作
Blog
啊? 没的话那就创建一个blogSchema
来规定向数据库中插入文档数据
Blog.create({
title: "title"
...
}, function (err){
if (!err) {
console.log("successful")
}
});
复制代码
简单的查询一下下
// named john and at least 18 yo
MyModel.find({ name: 'john', age: { $gte: 18 }});
复制代码
mongoose 支持的用法有:
Model.deleteMany()
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove()
Model.findOneAndReplace()
Model.findOneAndUpdate()
Model.replaceOne()
Model.updateMany()
Model.updateOne()