mongoose是什么?
mongoose官网: https://mongoosejs.com/.
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具,它是一个第三方模块。
Mongoose构建在mongodb之上,提供了Schema、Model和Document对象,用起来更为方便。
- Model:相当于mongoDB数据库中的集合
- Document:相当于数据库中的一个具体的文档
mongoose安装
npm install mongoose
使用
var mongoose = require('mongoose')
// 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/test', {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
});
// connect的第一个参数是连接的地址:其中mongodb是协议,127.0.0.1是IP地址,27017是端口号,注意如果这个端口号是27017可以省略不写最后一个mall是连接数据库的名称
// 监听数据库的连接状态
// 可以通过connection监听数据库的连接状态
var db = mongoose.connection;
// 连接成功
db.on('connected', function () {
console.log('MongoDB Connection Successed');
});
// 连接失败
db.on('error', function () {
console.log('MongoDB Connection Error');
});
初始化
Schema
schema是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力.
Schema对象:定义约束了数据库中的文档结构
// 创建Schema
let usersSchema = mongoose.Schema({
name: {
type: String
},
age: {
type: String
},
password: {
type: String
},
gender: {
type: String,
default:'男'
},
})
模型(把数据库中集合user和模板进行对应和绑定)
// 注意mongoose他会自动的吧集合的名称变成复数
let addressModel = new mongoose.model('users', usersSchema);
插入
// addressModel.create({
// name:'王文婷',
// age:'22',
// password:'123'
// },(err) => {
// if(!err){
// console.log('插入成功')
// }
// })
查询
// Model.find();返回数组
// Parameters
// filter 查询的条件
// [projection] 投影
// 两种方式:
// 1. {_id:0,name:1}
// 2. 'name -_id age'可以传一个字符串要的话直接写字段名不要的话在字段名的前面加上一个‘-’号
// [options] 查询选项 (skip、limit)
// [callback] 回调函数,查询结果会通过回调函数返回,回到函数必须传。如果不穿回调函数,就不会执行查询操作
// addressModel.find({name:'王文婷'},'name -_id age',{skip:3},(err,docs) => {
// console.log(docs)
// })
// Model.findOne();返回的是查询到的第一个文档,返回的是一个具体的对象
// Model.findById();返回的是一个具体的对象
修改
// Model.update()
// Parameters
// filter 查询条件
// doc 修改后的对象
// [options] 配置参数
// [callback] 回调函数
// addressModel.update({name:'王文婷'},{$set:{age:'100'}},{multi:true},(err) => {
// if(!err){
// console.log('修改成功')
// }
// })
// Model.updateOne()
// Model.updateMany()
删除
// 删除
// Model.deleteOne()
// Model.deleteMany()
// Model.remove()
// Parameters
// conditions 删除的条件
// [callback] 回调函数
// addressModel.remove({name:'王文婷'},(err) => {
// if(!err){
// console.log('删除成功')
// }
// })
统计文档的数量
// Model.count()
// Parameters
// conditions 删除的条件
// [callback] 回调函数
addressModel.count({},(err,count) => {
if(!err){
console.log(count)
}
})
模糊查询
function getByRegex(){
var whereStr = {'name':{$regex:/w/i}};
addressModel.find(whereStr, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
getByRegex();
上面示例中查询出所有用户名中有’w’的名字,且不区分大小写,其中用到的正则就是正则表达式正则。
文档中的方法
// var add = new addressModel({
// name:'奔波吧',
// age:'10',
// password:'123'
// })
// console.log(add);
// add.save(function(err){//save是通过文档对象调用的
// if(!err){
// console.log('保存成功')
// }
// })
addressModel.findOne({},(err,data) => {
if(!err){
// console.log(data)
}
// 修改
// data.update({$set:{age:28}},(err) => {
// if(!err){
// console.log('修改成功')
// }
// })
// 删除
// data.remove((err) => {
// if(!err){
// console.log('王文婷拜拜了')
// }
// })
// console.log(data.get('name'))
// data.set('name','哈哈哈')
// data.save()
// console.log(data.id)
data = data.toObject();//把文档转换称一个普通的js对象,注意转换成普通的js对象之后文档中的所有方法就不能使用了
// ,一般转换成普通的js对象只有在我们想要删除一个属性的石斛会使用到
delete data.name;
console.log(data)
})