Mongoos的CRUD操作

一、基本安装

① 通过 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);
    }
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。