更多个人博客:(https://github.com/zenglinan/blog)
如果对你有帮助,欢迎star。
用 Mongoose 可以很简单地操作 MongoDB 数据库。
1. 引入并连接
需要通过 uri 指定所需连接数据库的路径, 格式为:
'mongodb://username:password@host:port/database?options...'
连接和断开连接时可以指定回调, 如下便是一个连接示例:
const mongoose = require('mongoose')
const uri = "mongodb://127.0.0.1:27017/db"
mongoose.connection.on('connected', () => {
console.log("连接成功");
})
mongoose.connection.on('error', () => {
console.log("连接失败");
})
mongoose.connection.on('disconnected', () => {
console.log("失去连接");
})
mongoose.connect(uri)
也可以简化一下:
mongoose.connect(uri, (err) => {
if(err) console.log(err)
else console.log("连接成功");
})
2. Schema
Mongoose 中的一切都源于 Schema, 每个模式都映射到一个 MongoDB 集合,并定义该集合中文档的形状。
上面这段话来自于官方文档, 可能读起来有点迷糊, 没关系, 目前只需要知道他就像一种模式, 可以用来定义一些数据的格式, 那, Schema 怎么定义数据格式?
举个例子:
const UserSchema = new Schema({
name: {type: String, require: true},
age: {type: Number, require: true},
})
与此同时, 还可以定义更多的类型:
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
3. Model
Model(模型) 是通过 Schema 生成的构造器, 用于生成文档实例和操作数据库
const User = mongoose.model('User', UserSchema)
// 第一个参数会被 mongoose 转为小写复数形式, 作为 collection 集合的名字
除此之外, Model还提供了增删查改的功能:
增
增加一个文档:
Model.create({
name: "xiaohua",
age: 18
},(err,mes) => {
if(err) console.error(err);
else console.log(mes);
})
插入多条:
User.insertMany([{
name: "yilei",
age: 20
}, {
name: "yilei",
age: 60
}], (err, doc) => {
if (err) console.error(err)
console.log(doc);
})
除了可以用 Model 上的静态方法生成文档, 还可以通过实例化 Model 的方式生成文档, 然后用实例方法 save() 保存
删
删除一条:
User.deleteOne({
name: "xiaoli"
}, (err) => {
if(err) console.error(err)
})
删除多条:
User.deleteMany({
name: "yilei"
}, (err, doc) => {
if (err) console.error(err)
console.log(doc);
})
查
User.find({
name: "xiaoli"
}, (err, doc) => {
if(err) console.error(err)
console.log(doc);
})
// 匹配规则还可以更复杂一点, 比如我要找 10 =< 年龄 <= 99 的
User.find({
age: {"$gt": 10, "$lt": 99}
}, (err, doc) => {
if(err) console.error(err)
console.log(doc);
})
除此之外, Model 上还有 findById, findOne, where等静态方法
改
更改一条:
User.updateOne({
name: "yilei"
},{age: 21}, (err, doc) => {
if (err) console.error(err)
console.log(doc);
})
更改多条:
User.updateMany({
name: "xiaoli"
},{age: 21}, (err, doc) => {
if (err) console.error(err)
console.log(doc);
})
4. Document
在 Mongodb 中, Document(文档) 即数据
每个 Document 都是一个 Model 的实例
save
文档可以用 save() 方法保存
// 实例化 document
let user = new User({
name: "xiaohua",
age: 18
})
// 保存
user.save((err,mes) => {
if(err) console.error(err);
else console.log(mes);
})
也可以用上述的 Model.create() Model.insertMany()
创建