看完我的笔记不懂也会懂----MongoDB
- MongoDb数据库学习
- 数据库的分类
- 数据库基本概念
- MongoDB常用指令
- MongoDB的CURD
- sort({key:*[1,-1]})、limit(num)、skip(num)
- find()方法之投影
- Mongoose
- mongoose使用
- Mongoose增删改查
- Mongoose之Document
MongoDb数据库学习
数据库的分类
- 关系型数据库(RDBMS)
- 数据结构都是表
- 例如:MySQL、Oracle、DB2、SQL Server
- 非关系型数据库(NO SQL)
- 键值对数据库
- 文档数据库
MongoDB属于非关系型数据库中的文档数据库
数据库基本概念
- 数据库(database)
- 集合(collection)
- 文档(mongodb中的最小单位)
MongoDB常用指令
show dbs/databases 查看数据库
use 数据库名 切换到指定的数据库中(数据库可以不存在,如果不存在会在第一次向其中写入数据时创建)
db 查看当前所在的数据库
show collections 显示数据库中所有的集合
<colletions>.drop() 删除整个集合
dropDatabases(<databases>) 删除整个数据库
MongoDB的CURD
//切换到数据库
use mydb //存在就切换到,不存在会在第一次写入数据时创建
//Create 增 db.<collections>.insert({attr:value});
//向 mydb(数据库)中 的 data集合中 插入phone文档
db.data.insert({phone:13266032311}); //此时db是mydb
db.data.insert([{phone:13266032311},{test:'ok'}]); //此时db是mydb
//一次性只能插入一个
db.data.insertOne({phone:15362994569}); //此时db是mydb
//一次性只能插入多个(插入一个数组里面有多个文档)
db.data.insertMany([{phone:15362994569},{phone:15362994569}]); //此时db是mydb
//Retrieve 查 db.<collections>.find({att:value})
db.data.find(); //查询所有文档
db.data.find({}); //查询所有文档
db.data.find({name:"Fitz"}); //查询name为Fitz的文档
db.data.findOne() //查询符合条件的一个文档
//find()返回的是一个数组(数组里面的元素是文档),findOne()返回是一个文档
//所以find()[0] === findOne()
//返回文档长度
db.data.find().count();
db.data.find().length();
//update 改 db.<collections>.update/updateMany/updateOne({oldAttr:oldValue},{newAtt:newValue})
//直接将符合条件的对象完全替换为新对象
db.data.update({name:"wenda"},{name:"CLXXX",age:20})
db.data.replaceOne({name:"wenda"},{name:"CLXXX",age:20})
//修改指定属性
db.data.update(
{_id:ObjectId("5f4f64c6bf15e4118fcf7c2d")}, //找到指定对象
{$set:
{chinese:"English",name:"Been modified",age:"ddd"} //key为指定属性,value是新值
}
)
//update默认只会修改第一个,需要updateMany修改符合条件的多个文档
db.data.update(
{_id:ObjectId("5f4f64c6bf15e4118fcf7c2d")}, //找到指定对象
{
$set:
{aaa:"changeALL"}
},
{
//修改多个文档的属性
multi:true //将所有符合条件(有aaa属性)的文档的aaa属性的值修改为changeALL
}
)
//updateOne()
db.data.updateOne(
{name:"test",gender:"fff"},
{$set:
{gender:"newGender"}
}
)
//Delete 删 db.collection.remove()/deleteOne()/deleteMany()
//remove默认会删除符合条件的所有文档 注意:update默认只会修改一个
db.data.remove({_id:ObjectId("5f4f43b3bf15e4118fcf7c28")}) //删除id为...的文档
//让remove只删除符合条件的一个文档
db.data.remove({_id:ObjectId("5f4f43b3bf15e4118fcf7c28")},true) //删除id为...的文档
// **删除集合中的所有文档
db.data.remove({})
sort({key:*[1,-1]})、limit(num)、skip(num)
这三个方法能够以任意顺序使用
//找到user值为fitz的文档,根据user值的升序显示
db.data.find(
{user:"fitz"}
).sort({user:1})
//找到所有文档,但是最多只显示10条文档
db.data.find({}).limit(10)
//找到符合条件的文档(这里是所有文档),显示下一个能够显示的最大值(这里是20)
db.data.find({}).limit(10).skip(1)
find()方法之投影
利用find()方法的第二参数,可以使用投影,投影的作用是可以只显示我们想看到数据
//查找当前数据库中 data集合中 user值为fitz的文档 只显示这些文档的age值,并且以升序呈现
db.data.find(
{user:"fitz"},
{age:1} //1升序 -1降序
)
Mongoose
mongoose提供了schema能够较好的操作MongoDB
mongoose中为我们提供了几个新的对象
- Schema(模式对象)
- Schema对象定义约束了数据库中的文档结构
//创建schema对象
var Schema = mongoose.Schema; //这一步作用是简化后面书写
var stuSchema = new Schema({
name:String,
age:Number,
gender:{
type:String,
default:'Male'
},
address:String
})
- Model对象
- 相当于MongoDB中的collection集合
//通过schema创建model
//model相当于数据库中的集合collection //mongoose.model(modelName,schema)
//modelName是姚应社的集合名
//schema是第一步创建的schema约束
var StuModel = mongoose.model('student',stuSchema) //创建一个文档并将其插入到数据库中
StuModel.create({
name: 'Fitz',
age: 20,
gender: 'Female',
address: 'Chenwu'
},function(error){
if(error){
console.log(error);
}else{
console.log('插入成功');
}
})
- Document对象
- 相当于MongoDB中集合中的文档(每个数据)
- Document对象是Model是实例
//document对象是Model是实例
console.log(docs[0].__proto__ === StuModel.prototype); //true
console.log(docs[0] instanceof StuModel.prototype); //true
mongoose使用
连接/断开数据库
//引入mongoose对象
var mongoose = require("mongoose");
//连接MongoDB数据库
mongoose.connect('mongodb://127.0.0.1:27017/mongoose_test')
//监听数据库连接事件
mongoose.connection.once('open',function(){
console.log('connect success');
})
//监听数据库断开事件
mongoose.connection.once('close',function(){
console.log('数据库已断开');
})
//断开数据库连接
//mongoose.disconnect()
Mongoose增删改查
增(Create)
//Model.create(content,[callback])
StuModel.create([
{
name:'1',
age:10,
gender:'male',
address:'one'
},
{
name:'2',
age:20,
gender:'Female',
address:'two'
},
])
删(Delete)
/*
* Model.remove(conditions,[callback])
* Model.deleteOne(conditions,[callback])
* Model.deleteMany(conditions,[callback])
* */
StuModel.remove(
{name:1},
function(e,info){
if(e){
console.log(e);
}
console.log(info);
}
)
改(Update)
/*
* Model.update(conditions,doc,[options],[callback])
* Model.updateOne(conditions,doc,[options],[callback])
* Model.updateMany(conditions,doc,[options],[callback])
* */
StuModel.update(
{name: 2},
{$set:
{
name: 'nameChange',
address: 'addressChange'
}
},
function(e,info){
if(e){
console.log('ERROR: ' + e);
}
console.log(info);
}
)
StuModel.updateOne(
{name: 2},
{$set:
{
name: 'nameChange',
}
},
function(e,info){
if(e){
console.log('ERROR: ' + e);
}
console.log(info);
}
)
查(Retrieve)
/*
* Model.find(conditions,[projection],[options],[callback]) 符合条件的所有文档
* Model.findById(id,[projection],[options],[callback]) 根据id查找
* Model.findOne([conditions],[projection],[options],[callback]) 查找符合条件的第一个文档
* Model.count([conditions],[callback]) 查找符合条件的文档数量
*
* conditions 条件
* projection 条件
* options 查询选项(skip、limit)
* callback 查询结果通过回调函数返回
*/
StuModel.find(
//第一个参数 查询条件
{
//name: 'Fitz'
},
//第二个参数 投影
//设置投影 方式一
'address -_id', //不需要显示的用-
//设置投影 方式二
/*{
address:1
},*/
//第三个参数 选项
{skip:2,limit:1},
//第四个参数 回调函数
function(error,docs){
console.log(docs); //结果返回一个 包含文档对象 的 数组
}
)
//数据统计
StuModel.count({},function(e,countNum){
if(e){
console.log(e)
}else{
console.log(countNum)
}
})
Mongoose之Document
Document 和 集合中的文档一一对应,
创建Document
//var doc = new Model({})
var stu = new StuModel({
name:'newStu',
age:40,
gender:'male',
address:'DG'
})
修改Document
StuModel.findOne({},function(e,doc){
console.log(doc);
//方法一
doc.update(
{
$set:{
gender:'male'
}
},
function(e){
if(!e){
console.log('修改成功');
}
}
)
//方法二
doc.address = 'ChenWu'
doc.save()
console.log('修改后结果==>' + doc);
})
删除Document
StuModel.findOne({},function(e,doc){
doc.remove(function(){
console.log('成功删除');
})
})
获取Document的属性值
StuModel.findOne({},function(e,doc){
var result = doc.get('name')
console.log(result)
})
设置Document的属性值
StuModel.findOne({},function(e,doc){
doc.set('address':'China')
doc.save()
})
看完我的笔记不懂也会懂----MongoDB的更多相关文章
- 看完我的笔记不懂也会懂----bootstrap
目录 Bootstrap笔记 知识点扫盲 容器 栅格系统 源码分析部分 外部容器 栅格系统(盒模型)设计的精妙之处 Bootstrap笔记 写在开始: 由于我对AngulaJS的学习只是一个最浅显的过 ...
- 看完我的笔记不懂也会懂----AngulaJS
目录 Angular.js学习笔记 ng-app(指令) ng-model ng-init angular之表达式 双向数据绑定 数据流向的总结 作用域对象 控制器对象 依赖对象与依赖注入 命令式与声 ...
- 看完我的笔记不懂也会懂----git
Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...
- 看完我的笔记不懂也会懂----Node.js
Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...
- 看完我的笔记不懂也会懂----javascript模块化
JavaScript模块化 模块化引子 模块化的历史进化 模块化规范 CommonJS规范 Node.js(服务器端) 下项目的结构分析 browerify(浏览器端) 下项目的结构分析 AMD规范 ...
- 看完我的笔记不懂也会懂----less
目录 Less学习 语法篇 注释 变量 映射(Maps) @规则嵌套和冒泡 less中的嵌套规则 less中的混合 less的运算 extend延伸/继承 less忽略编译(转义) 导入(Import ...
- 看完我的笔记不懂也会懂----MarkDown使用指南
目录 语法 [TOC] 自动生成目录 1. 标题 2. 文本强调 3. 列表 4. 图片 5. 超链接 6. 文本引用 7. 分割线 8. 代码 9. 任务列表 (MPE专属) 10. 表格 11. ...
- 看完我的笔记不懂也会懂----ECMAscript 567
目录 ECMAscript 567 严格模式 字符串扩展 数值的扩展 Object对象方法扩展 数组的扩展 数组方法的扩展 bind.call.apply用法详解 let const 变量的解构赋值 ...
- 看完我的笔记不懂也会懂----Ajax
Ajax(Asynchronous JavaScript And XML) - 本次学习所用到的插件 - XML - JSON - 关于AJAX - HTTP协议 - AJAX重点之XMLHttpRe ...
随机推荐
- SPOJ1812 LCS2 - Longest Common Substring II【SAM LCS】
LCS2 - Longest Common Substring II 多个字符串找最长公共子串 以其中一个串建\(SAM\),然后用其他串一个个去匹配,每次的匹配方式和两个串找\(LCS\)一样,就是 ...
- Codeforces Round #656 (Div. 3) B. Restore the Permutation by Merger (模拟)
题意:有两个完全相同的排列,将其中一个的元素按相对顺序插入另外一个排列中,给你操作完的排列,求原排列. 题解:感觉看看样例就能直接写了啊,直接遍历,用桶存数字个数,如果桶为空,直接输出即可. 代码: ...
- 国产网络测试仪MiniSMB - 双击就可以直接编辑数据报文字段(如IP地址)
国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...
- [整理] LRU 算法的实现方式
目录 概念 方法选择 实现方案(基于LinkedHashMap) 改进方案 1.LRU-K 2.Two queue 3.Multi Queue(MQ) LRU类算法对比 LRU 在 Redis 中的应 ...
- K8S(07)交付实战-架构说明并准备zk集群
k8s交付实战-架构说明并准备zk集群 目录 k8s交付实战-架构说明并准备zk集群 1 交付的服务架构图: 1.1 架构图解 1.2 交付说明: 2 部署ZK集群 2.1 二进制安装JDK 2.1. ...
- java中string,stringBuffer和StringBuider
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...
- test markdown && 代码高亮
#include<cstdio> #include<cstring> #include<queue> #include<vector> #include ...
- redis持久化-AOF
1.aof文件写入与同步 2.aof重写 重写的目的是为了减小aof文件的体积,redis服务器可以创建一个新的aof文件来代替现有的aof文件,新文件不会有冗余的命令. BGREWRITEAOF:遍 ...
- IDEA 安装常用操作二
一.IDEA启动慢,因为启动时编译.缓存.创建索引等,如果断电等启动异常,可以让缓存索引失效 迁移IDEAD时,可以找到config.system等文件夹, 随着时间使用越久,空间占用越大,另外觉得浪 ...
- Commons Collections2分析
0x01.POC分析 //创建一个CtClass对象的容器 ClassPool classPool=ClassPool.getDefault(); //添加AbstractTranslet的搜索路径 ...