一、基本安装
① 通过 cnpm install mongoose 安装
② 引用 const mongoose = require('mongoose')
二、基本操作
① 链接操作
建立连接:mongoose.connect('mongodb://主机IP地址:端口号/数据库名字',callback)
打开连接:mongoose.connection.once('open',callback)
关闭连接[不在一个server中不能关闭]:mongoose.disconnect()
mongoose.connection.once('open',callback)
//文件夹目录结构: utils -- mongodb --index.js
const mongoose = require('mongoose')
function dbConnect(url){
mongoose.connect(url);
mongoose.connection.once('open',function(err){
if(!err){
console.log('mongodb is open success!')
}
})
}
function dbDisconnect(){
mongoose.connect();
mongoose.connection.once('close',function(err){
if(!err){
console.log('close is open success!')
}
})
}
exports.dbConnect=dbConnect;
exports.dbDisconnect=dbDisconnect;
② 架构模型
架构:Schema
定义架构:var Schema = mongoose.Schema;
实例化架构[定义数据集合的模板]:var stuSchema = new Schema({...})[数据的类型是js种的数据类型]
模型:model
定义模板:var stuModel = mongoose.model('数据集合名字',架构名称)
const mongoose = require('mongoose')
const Connect = require('./utils/mongodb/index');
// 1.定义架构
const Schema = mongoose.Schema;
Connect.dbConnect('mongodb://169.254.95.200:27017/lnsf2017');
// 2.实例化架构--定义数据集合的模板
var stuSchema = new Schema({
stuId:String,
stuName:String,
birth:String,
address:String,
gender:{
defaule:'female',
type:String,
}
})
// 3.绑定数据集合和schema
var stumodel = mongoose.model('students',stuSchema);
③ CRUD操作
添加用户: stuModel.create({增加的数据},callback)
注意事项:不在schema的字段是不能被添加的;两个参数,第一个是对象,第二个返回的方法;返回值是一个query:通过callback的doc参数输出
删除用户:
remove:删除满足条件的多条:stuModel.remove({condition},callback)
deleteOne:删除满足条件的_id最小的一条:stuModel.deleteOne({condition},callback)
deleteMany:删除满足条件的多条stuModel.deleteMany({condition},callback)
注意事项:没有delete方法,delete是作为一个全局的函数存在;执行返回的结果是query对象。执行的结果可通过callback的doc返回:
修改用户:
update:默认修改一条,想要修改多条,增加multi
stuModel.update({condition},{修改的值},[options],callback)
updateOne:修改满足条件的_id最小的一条:
stuModel.update({condition},{修改的值},callback)
updateMany:stuModel.update({condition},{修改的值},callback)
replaceOne:用doc替换conditions中的对象
stumodel.replaceOne({conditions},{doc},[options],callback
注意事项:当用没有在model中的属性更新时,只保留_id和默认值
查找用户
findById:查询满足_id的对象:stumodel.findOne('id',callback)
find:查询满足条件的多条,用doc返回一个数组:
stuModel.find({coodition},callback)
findOne:查询满足条件的_id最小的一条,用doc返回一个对象
stumodel.findOne({conditions},callback)
注意事项:
因为有了schema的存在,不会增加schema以外的属性,并且替换时也不会替换掉整个对象;
model在插入数据时,会把collection变成复数;
由于node.js多线程问题,需要将顺序执行的东西放在一个函数内,否则处在同级会同时进行;
当建立/关闭起链接时,就会触发open/close函数
const studentModel = require('./stu_model')
var stumodel = studentModel.stumodel;
// CRUD操作
// ① 添加用户
stumodel.create({
stuId:'1001',
stuName:'zhaoliu',
birth:'2001-11-21',
address:'湛江',
age:18//创建mschema中没有定义的属性,在数据库中不会插入该属性,但是会插入数据
},function(err){
if(!err){
console.log('添加成功!')
}
})
// ② 删除用户--remove、deleteOne、deleteMany
//remove--删除满足条件的_id最小的一条数据
function deleteStu(){
stumodel.remove({stuId:'1005'},function(err,doc){
if(!err){
console.log('删除成功!')
console.log(doc)
}
})
}
deleteStu();
//deleteOne--删除一条数据
stumodel.deleteOne({stuId:'1005'},function(err){
if(!err){
console.log('删除成功!')
}
})
//deleteMany--删除多条数据
stumodel.deleteMany({stuId:'1005'},function(err){
if(!err){
console.log('删除成功!')
}
})
// ③ 修改用户--update、updateOne、updateMany、replaceOne
// 有了schema的约束,不会替换掉整个对象
function updateStu(){
stumodel.update({stuId:'1001'},{stuName:'xiaoming'},{multi:true},function(err,doc){
if(!err){
console.log('修改成功!');
console.log(doc)
}
})
}
updateStu();
// uodateOne
stumodel.updateOne({stuId:'1001'},{stuName:'张三'},function(err){
if(!err){
console.log('修改成功!')
}
})
//updateMany
stumodel.updateMany({stuId:'1005'},{stuName:'张三'},function(err){
if(!err){
console.log('修改成功!')
}
})
//replaceOne--会将满足条件的整个对象都替换掉
并且当用没有在model中的属性更新时,只保留_id和默认值
function updateStu(){
stumodel.replaceOne({stuId:'1001'},{stuName:'哈哈哈'},{multi:true},function(err,doc){
if(!err){
console.log('修改成功!');
console.log(doc)
}
})
}
updateStu();
// 4.查找用户--find、findOne、findMany
// ① find--满足条件的多条,返回结果在callback的doc中
var stumodel = studentModel.stumodel;
stumodel.find({stuId:'1001'},function(err,doc){
if(!err){
console.log(doc);
}
})
//② findOne--查询满足条件的_id最小的一条
var stumodel = studentModel.stumodel;
stumodel.findOne({stuId:'1001'},function(err,doc){
if(!err){
console.log(doc);
}
})
//③ findById--查询满足条件的_id最小的一条
var stumodel = studentModel.stumodel;
stumodel.findOne('5ee762be884cc136c0c7d8a1',function(err,doc){
if(!err){
console.log(doc);
}
})