MongoDB 学习笔记(原创)
MongoDB 学习笔记
mongodb
数据库
nosql
一、数据库的基本概念及操作
SQL术语/概念 |
MongoDB术语/概念 |
解释/说明 |
---|---|---|
database |
database |
数据库 |
table |
collection |
数据库表/集合 |
row |
document |
数据记录行/文档 |
column |
field |
数据字段/域 |
index |
index |
索引 |
table |
joins |
表连接,MongoDB不支持 |
primary key |
primary key |
主键,MongoDB自动将_id字段设置为主键 |
- 创建数据库
> use mydb
- 查看当前连接的数据库
> db
-> mydb
- 查看所有的数据库
> show dbs
-> mydb
- 销毁数据库
> use local
switched to db local
> db.dropDatabase()
二、集合(Collection)的基本操作
- 创建集合
> db.creationCollection('users')
- 查看创建的集合
> show collections
- 删除集合
> db.users.drop()
- 向集合中插入数据
1.insert() 插入数据时,如果 users 集合没有创建会自动创建。
> use mydb
switched to db mydb
> db.users.insert([
... { name : "jam",
... email : "jam@qq.com"
... },
... { name : "tom",
... email : "tom@qq.com"
... }
... ])
2.使用 save() 插入数据时,如果 users 集合没有创建会自动创建。
> use mydb2
switched to db mydb2
> db.users.save([
... { name : "jam",
... email : "jam@qq.com"
... },
... { name : "tom",
... email : "tom@qq.com"
... }
... ])
- 更新数据 db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA)
> use mydb2
switched to db mydb2
> db.mysb2.update({'name':'jam'},{'name':'bob'})
- 删除数据 db.COLLECTION_NAME.remove(DELECTION_CRITERIA)
> use mydb2
switched to db mydb2
> db.mydb2.remove({'name':'tom'})
操作语句 |
作用 |
---|---|
db.createCollection('COLLECTION_NAME') |
创建集合 |
db.COLLECTION.drop() |
删除集合 |
db.COLLECTION_NAME.insert(document) |
插入文档 |
db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA) |
更新文档 |
db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA}) |
替换已存在的文档 |
db.COLLECTION_NAME.remove(DELECTION_CRITERIA) |
删除文档 |
三、数据查询
- find() 语句
> use mydb
switched to db mydb
> db.mydb.insert({'name':'mars','age':12,'gender':'man'})
1.不加参数时返回所有记录
> db.mydb.find()
{ "_id" : ObjectId("589dc5f3e86d38da8455b314"), "name" : "marsggbo" }
{ "_id" : ObjectId("589dcac5e86d38da8455b315"), "name" : "mars", "age" : 12, "gender" : "man" }
2.带参数
> use mydb
> db.mydb.find({'name':'mars'})
{ "_id" : ObjectId("589dcac5e86d38da8455b315"), "name" : "mars", "age" : 12, "gender" : "man" }
2.1 条件操作符1
(>) 大于 - $gt #greate (<) 小于 - $lt #low (>=) 大于等于 - $gte #equal (<= ) 小于等于 - $lte
2.2 条件操作符2
- type
- $type
type的值:
双精度型-1 字符串-2 对象-3 数组-4 二进制数据-5 对象ID-7 布尔类型-8 数据-9 空-10 正则表达式-11 JS代码-13 符号-14 有作用域的JS代码-15 32位整型数-16 时间戳-17 64位整型数-18 Min key-255 Max key-127
范例:
> use student
switched to db student
> db.student.find({"name":{$type:2}})
查找name是字符串的文档记录
- limit和skip
limit:读取指定数量的数据记录 -limit skip:读取时跳过指定数量的数据记录
首先查看student集合中年龄大于20的数据
> use student
switched to db student
> db.student.find({'age':{$gt:20}})
{ "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m
an", "age" : 23 }
{ "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m
an", "age" : 29 }
{ "_id" : ObjectId("589dd11ce3b6b824fd0620e9"), "age" : 22, "name" : "ab
", "sex" : "woman" }
限制只显示一个数据后,默认显示最前面的数据 (第一行命令不用重复编写,这里是因为markdown解析非得加上这句话才能高亮。。。)
> use student
switched to db student
> db.student.find({'age':{$gt:20}}).limit(1)
{ "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m
an", "age" : 23 }
跳过一条数据,则可猜想显示结果为第二个数据
> use student
switched to db student
> db.student.find({'age':{$gt:20}}).limit(1).skip(1)
{ "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m
an", "age" : 29 }
- pretty() 语句 作用是使查询输出的结果更美观
> use mydb
> db.mydb.find().pretty()
{ "_id" : ObjectId("589dc5f3e86d38da8455b314"), "name" : "marsggbo" }
{
"_id" : ObjectId("589dcac5e86d38da8455b315"),
"name" : "mars",
"age" : 12,
"gender" : "man"
}
- sort() 排序
与sqlite中的排序一样有升序和降序,其中升序用1表示,降序用-1表示
示例
> use student
switched to db student
> db.student.find().sort({'age':1})
{ "_id" : ObjectId("589dcf866ac83b9ae69f63e7"), "name" : "z", "sex" : "f
eman", "age" : 19 }
{ "_id" : ObjectId("589dd11ce3b6b824fd0620e9"), "age" : 22, "name" : "ab
", "sex" : "woman" }
{ "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m
an", "age" : 23 }
{ "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m
an", "age" : 29 }
总结: 可以使用find进行查询,sort用于排序,ensureIndex用于建立索引,aggregate用于聚合。
- 检测到Loaderlock的问题
- 权威报告预测比特币在2018年“王位”不保
- Linux下FTP环境部署梳理(vsftpd和proftpd)
- Silverlight如何与JS相互调用
- Docker容器学习梳理--私有仓库Registry使用
- 从插件重构看如何提升测试质量与效率
- 巧用WinRAR+Javascript解决activeX的自动安装问题
- 在网页中实现QQ的屏幕截图功能
- Activity之间传递参数
- linux下rsync和tar增量备份梳理
- 重温Delphi之:面向对象
- Android新手之旅(15) Win7下配置遇到的问题
- 重温Delphi之:如何定义一个类
- Android新手之旅(2) 新手问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- opencv 图像腐蚀和图像膨胀的实现
- PHP实现微信退款的方法示例
- 基于Python和C++实现删除链表的节点
- python让函数不返回结果的方法
- PHP微商城开源代码实例
- PHP小程序支付功能完整版【基于thinkPHP】
- CodeIgniter框架实现的整合Smarty引擎DEMO示例
- PHP微信支付功能示例
- PHP中ltrim()函数的用法与实例讲解
- Laravel 中创建 Zip 压缩文件并提供下载的实现方法
- pytorch随机采样操作SubsetRandomSampler()
- Pytorch上下采样函数–interpolate用法
- scrapy框架携带cookie访问淘宝购物车功能的实现代码
- 浅析Python __name__ 是什么
- PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】