MongoDB学习笔记三 - MongooseAPI操作数据
在上一篇我们讲了如何通过Mongoose想数据库动态添加数据, 接下来我们一起来看一下如何通过Mongoose来对数据库进行增删改查等一系列操作
Model 对象的方法
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)- 等等
1. 前置代码
// 引入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);
2. 查询文档
演示:
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)
}
});

参数解析:
- conditions: 查询条件
- projection: 投影
- 两种方式,下面两种方式所投影出来的效果是一样的
{name:1,_id:0}"name -_id
- options: 查询选项(
skip, limit) - callback: 回调函数, 查询结果会通过回调函数返回
**注意:**通过find() 查询的结果, 返回的对象, 就是Document 文档对象
Document对象是Model的实例
验证代码如下:
stuModel.findById("611a9aa01647216accf385fa", function (err, docs) {
if (!err) {
console.log(docs instanceof stuModel)
}
})

3. 修改文档
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);
});


4. 删除文档
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);
} )

Document文档对象
- 通过
Model对数据库进行查询时, 会返回Document对象或Document对象组合 Document继承自Model,代表一个集合中的文档Document对象也可以和数据库进行交互操作
Document对象的方法
equals(doc)idget(path,[type])set(path,value,[type])update(update,[options,callback])save([callback])remove([callback])isNewisInit(path)toJSON()toObject()
前置代码同上:
演示
1. 插入数据
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('保存成功');
}
})


2. 更新数据
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));
})

3. 删除数据
remove([callback])
// remove([callback]) - 删除数据
stuModel.findOne({ name: '楚子航' }).then(res => {
res.remove()
})
4. 获取数据
get(path,[type]): 获取当前document对象属性
stuModel.findOne({ name: '楚子航' }).then(res => {
console.log(res.get('name'))
})

5. 转换数据格式
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());
})
MongoDB学习笔记三 - MongooseAPI操作数据的更多相关文章
- MongoDB学习笔记三—增删改文档上
插入insert 单条插入 > db.foo.insert({"bar":"baz"}) WriteResult({ }) 批量插入 > db.fo ...
- Mongodb学习笔记三(Mongodb索引操作及性能测试)
第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...
- MongoDB学习笔记三:查询
MongoDB中使用find来进行查询.查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合.find的第一个参数决定了要返回哪些文档,其形式也是一个文档,说明要执行的查询细节.空的查询 ...
- MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- Mongodb 学习笔记(三) .net core SDK
首先添加 Nuget包 MongoDB.Driver 创建一个Model. public class Student { public ObjectId _id { get; set; } publ ...
- MongoDB学习笔记(转)
MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...
- MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁
权限 绑定内网I ...
- MongoDB 学习笔记(原创)
MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
随机推荐
- PAT乙级:1063 计算谱半径 (20分)
PAT乙级:1063 计算谱半径 (20分) 题干 在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的 n 个复数空间的特征值 { a1+b1i,⋯,a** ...
- Pytorch系列:(八)学习率调整方法
学习率的调整会对网络模型的训练造成巨大的影响,本文总结了pytorch自带的学习率调整函数,以及其使用方法. 设置网络固定学习率 设置固定学习率的方法有两种,第一种是直接设置一些学习率,网络从头到尾都 ...
- 一张图概括mysql的各种join用法
- SSM框架中,利用ajax,jQuery,json动态刷新局部页面,实现用户名查重提示
1.在applicationContext.xml配置json文件 2.jsp页面 3.js语句 js语句在script标签中使用, 4.控制层 5.逻辑处理层 6.Dao层方法 7.Mapping层 ...
- python开发包之pyecharts
一.python包国内源网址有: 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/ ...
- Python开发篇——如何在Flask下编写JWT登录
首先,HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)--每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求 ...
- 如何临时发布部署Cocos小游戏到Linux服务器,让别人能在微信打开
两个星期前,我们发布了第一个小游戏教程: 教程:制作一个小游戏送给喜欢的TA(不会编程也能学会哦) 上周有好几位小伙伴在b站催更,呃,作为小透明,收到催更信息后还是很激动的!竟然有同学在看我们的小教程 ...
- nuxt服务部署到云上全程记录
首先,在使用脚手架nuxt-app中创建项目时,箭头选用不起作用,这是因为git bash在windows中交互问题,临时的解决办法是换用cmd 登录云服务器后,首先安装nodejs yum inst ...
- 漫谈CUDA优化
作者:Lawliet 翻译:仿佛若有光 前言: 几个月前,我根据 Simoncelli 2016 年的论文编写了自己的自动编码器,用于研究目的.一开始,我想使用一些流行的深度学习框架(例如 Ten ...
- Spring WebFlux 基础教程:参数校验
请求参数校验,在实际的应用中很常见,网上的文章大部分提供的使用注解的方式做参数校验.本文主要介绍 Spring Webflux Function Endpoint 使用 Spring Validati ...