在上一篇我们讲了如何通过Mongoose
想数据库动态添加数据, 接下来我们一起来看一下如何通过Mongoose
来对数据库进行增删改查等一系列操作
remove(cinditions,callback)
deleteOne(conditons.callback)
deleteMant(conditions,callback)
find(conditions,projection,options,callback)
findById(id,projection,options,callback)
findOne(conditions,projection,options,callback)
count(conditions,callback)
create(doc,callback)
update(conditions,doc,options,callback)
// 引入mongoose模块 const mongoose = require("mongoose"); // 连接数据库 mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true}); // 测试是否连接成功 mongoose.connection.once("open", function () { // 连接成功执行 console.log('连接成功~'); }); // 创建Schema对象, 赋值给一个变量 const Schema = mongoose.Schema; // 创建Schema(模式)对象 const stuSchema = new Schema({ name: String, age: Number, gender: { type:String, default:'男' }, address:String }); // 通过Scheme来创建Model // Model代表的是数据库中的集合, 通过Model才能对数据库进行操作 // mongoose.model(modelName,schema); // modelName: 就是要映射的集合名称, mongoose会自动将集合名变成复数 // schema: 创建的Schema对象 const stuModel = mongoose.model('student', stuSchema);
演示:
find(conditions,[projection],[options],[callback])
- 查询所有符合条件的文档stuModel.find({}, {name:1,_id:0}, function (err,docs) { if (!err) { console.log(docs) } })
运行结果:
{skip:3,limit:1}: 表示跳过三条数据, 显示一条数据 stuModel.find({}, { name: 1, _id: 0 }, {skip:3,limit:1},function (err,docs) { if (!err) { console.log(docs) } })
findById(id,[projection],[options],[callback])
- 根据文档的_id
属性查询文档stuModel.findById("611a9aa01647216accf385fa", function (err, docs) { console.log(err) if (!err) { console.log(docs) } })
findOne(conditions,[projection],[options],[callback])
- 查询符合条件的第一个文档stuModel.findOne({}, { name: 1 },function (err,docs) { if (!err) { console.log(docs) } });
参数解析:
{name:1,_id:0}
"name -_id
skip, limit
)**注意:**通过find() 查询的结果, 返回的对象, 就是Document 文档对象
Document对象是Model的实例
验证代码如下:
stuModel.findById("611a9aa01647216accf385fa", function (err, docs) { if (!err) { console.log(docs instanceof stuModel) } })
update(conditions,doc,[options],callback)
updateMany(conditions,doc,[options],callback)
updateOne(conditions,doc,[options],callback)
replaceOne(conditions,doc,[options],callback)
- 使用给定文档替换现有文档参数
conditions
: 查询条件doc
: 修改后的对象options
: 配置参数callback
: 回调函数// 修改_id为611a9aa01647216accf385fa的数据,将name改为张三 stuModel.update({ _id: '611a9aa01647216accf385fa' }, { $set: { name: '张三' } },function (err,doc) { console.log(err, doc); });
remove(cinditions,callback)
deleteOne(conditons.callback)
deleteMant(conditions,callback)
// 删除文档中 name: '张三' 的数据 stuModel.remove({ name: '张三' }, function (err, doc) { if (!err) { console.log(doc); console.log('删除成功') } })
Model.count(conditions , callback )
conditions :
条件callback
: 回调函数stuModel.count({ name: '小明' }, function (err, count) { console.log(count); } )
Model
对数据库进行查询时, 会返回Document
对象或Document
对象组合Document
继承自Model
,代表一个集合中的文档Document
对象也可以和数据库进行交互操作Document对象的方法
equals(doc)
id
get(path,[type])
set(path,value,[type])
update(update,[options,callback])
save([callback])
remove([callback])
isNew
isInit(path)
toJSON()
toObject()
前置代码同上:
演示
save([callback])
const stuModel = mongoose.model('student', stuSchema); // 创建一个Document var stu1 = new stuModel({ name: '路明非', age: 24, gender: '男', address:'卡塞尔学院' }); // console.log(stu1); // 调用document API 将数据保存到数据库 stu1.save(function (err) { if (!err) { console.log('保存成功'); } })
update(update,[options,callback])
// Mongoose中的方法也可以使用promise的方式 stuModel.findOne({}).then(res => { res.update({ $set: { age: 22 } }).then(res => { console.log('修改成功'); }) })
// 更新数据方法二 stuModel.findOne({}).then(res => { res.age = 25; res.save(); })
set(path,value,[type])
: 根据当前document对象设置对应属性值// set() stuModel.findOne({ name: '楚子航' }).then(res => { console.log(res.set("age",15)); })
remove([callback])
// remove([callback]) - 删除数据 stuModel.findOne({ name: '楚子航' }).then(res => { res.remove() })
get(path,[type])
: 获取当前document对象属性stuModel.findOne({ name: '楚子航' }).then(res => { console.log(res.get('name')) })
toJSON()
: 转换为一个JSON
对象// toJSON() stuModel.findOne({ name: '楚子航' }).then(res => { console.log(res.toJSON()); })
toObject()
: 将document
对象转换为一个普通的JS对象js
对象以后, 注意所有的Document
对象的方法或属性都不能使用了// toObject() stuModel.findOne({ name: '楚子航' }).then(res => { console.log(res.toObject()); })