**概念对比
------------------------------------
|mysql | 和 | mongodb | 概念比较 |
------------------------------------
|mysql | mongodb | 含义 |
------------------------------------
|database | database | 数据库 |
------------------------------------
|table | collection | 表/集合 |
------------------------------------
|column | field | 字段/域 |
------------------------------------
|row | document | 记录/文档 |
------------------------------------
|index | index | 索引 |
------------------------------------
终端下:
mongostat 数据库的监测命令
mongotop 监测每个数据读写时长
数据库的备份和恢复
备份 mongodump -h dbhost -d dbname -o dbdir
(主机地址) (数据库名) (备份后的名)
恢复 mongorestore -h host:port -d dbname dbpath
地址:端口 新库名 文件路径/文件名
系统数据库
admin : 存放用户和权限信息
local : 存放本地化数据
config : 存储分片信息
查看当前库
db
创建数据库
use 库名
查看数据库
show dbs
查看集合
show collections
show tables
删除数据库 (首先进到库里)
db.dropDatabase()
删除集合
db.集合名.drop()
创建一个的集合
db.createCollection('集合名')
插入数据 * 插入键可以不加引号|如果这个集合不存在则自动创建
db.集合名.insert({"name":"Lucy", "age":18})
插入多条
db.集合名.insert([{XXX},{XXX},{XXX}])
db.表名.insertMany([{XXX},{XXX},{XXX}])/db.表名.insertOne([{XXX},{XXX},{XXX}])/
*如果插入时有原数据则覆盖* db.表名.save([{x:'x'},{x:'x'},{x:'x'}])
获取集合对象 方法
db.getCollection("集合名") *后可加插入*
db.getCollection("class1").insert({name:'老王', age:'36'})
查找数据
db.集合名.find()
查看集合结果
db.集合名.find([query,field]) query:条件,field:域名:1是显示/0是不显示
集合重命名
db.原名.renameCollection("新名")
删除文档一或多
remove(query,justOne)
功能 : 删除文档
参数 : query 用法同find
justOne 布尔值 默认为false表示删除所有符合条件的文档
设置为true则表示只删除一条
e.g. 删除所有不存在sex域的文档
db.class1.remove({sex:{$exists:false}})
e.g. 删除第一条性别为w的文档
db.class1.remove({sex:'w'},true)
删除集合中所有文档
e.g. 删除class1中所有文档
db.class1.remove({})
Mongo DB 查询大全
操作符 : 使用$符号注明的一个特殊字符串,表达一定的含义,比如 $lt 表示小于
比较操作符
$eq 等于 ==
$lt 小于 <
$gt 大于 >
$lte 小于等于 <=
$gte 大于等于 >=
$ne 不等于 !=
$eq 等于 ==
查找年龄等于18
db.class0.find({age:{$eq:18}},{_id:0})
db.class0.find({age:18},{_id:0})
$lt 小于 <
查找年龄小于18的
db.class0.find({age:{$lt:18}},{_id:0})
db.class0.find({name:{$lt:"John"}},{_id:0})
* 在mongodb中字符串可以比较大小
$lte 小于等于 <=
年龄小于等于18
db.class0.find({age:{$lte:18}},{_id:0})
$gt 大于 >
查找年龄大于16 且 小于19
db.class0.find({age:{$gt:16,$lt:19}},{_id:0})
* 在mongodb中所有的{} [] 中都可以写多个条件。但根据 参数的不同表达的意思不一样
$gte 大于等于 >=
大于等于19
db.class0.find({age:{$gte:19}},{_id:0})
$ne 不等于 !=
性别不等于‘m’的
db.class0.find({sex:{$ne:'m'}},{_id:0})
* 使用ne查找也会找到该域不存在的文档
$in 包含
找到年龄为 [10,20,30]
db.class0.find({age:{$in:[10,20,30]}},{_id:0})
$nin 不包含
找到年龄不是 17 18 19 的
db.class0.find({age:{$nin:[17,18,19]}},{_id:0})
逻辑操作符
$and
1. 在 query 如果写多个条件默认即为 and 关系
db.class0.find({age:{$lt:18},sex:'m'},{_id:0})
2. 逻辑与 $and
年龄小于18并且 性别为男
db.class0.find({$and:[{age:{$lt:18}},{sex:'m'}]},{_id:0})
$or 逻辑或
年龄小于16或者年龄大于18
db.class0.find({$or:[{age:{$lte:16}},{age:{$gt:18}}]},{_id:0})
$not 逻辑非
查找年龄不小于18岁的
db.class0.find({age:{$not:{$lt:18}}},{_id:0})
$nor not (a or b) ===> (not a) and (not b)
性别不是m且年龄不小于18
db.class0.find({$nor:[{sex:'m'},{age:{$lt:18}}]},{_id:0})
逻辑条件混合
(年龄大于17 并且 为男生) 或者 姓名叫 Abby
db.class0.find({$or:[{age:{$gt:17},sex:'m'},{name:'Abby'}]},{_id:0})
(年龄不大于18 或者为 女性) 并且 姓名 大于Lucy
db.class0.find({$or:[{age:{$not:{$gt:18}}},{sex:'w'}],name:{$gt:'Lucy'}},{_id:0})
Array (数组)
[1,2,3,4]
* 数组是有序的数据集合
* mongo中数组也可以有多重数据元素混合
查找数组中包含某一条件的元素
只要score数组中包含小于60的元素即可查询过滤
db.class1.find({score:{$lt:60}},{_id:0})
$all
查找数组同时包含多项的文档
查找同时包含49 67的文档
db.class1.find({score:{$all:[49,67]}},{_id:0})
$size
通过数组元素个数查找
***
查找score中包含两个元素的文档
db.class1.find({score:{$size:2}},{_id:0})
$slice
显示数组中指定项
****
显示数组前两项
db.class1.find({},{_id:0,score:{$slice:2}})
显示数组索引下表1到2
db.class1.find({},{_id:0,score:{$slice:[1,2]}})
其他常用查找操作符
$exists
查找域名是否存在(true表示存在false表示不存在)
查找不存在sex域的文档
db.class1.find({sex:{$exists:false}},{_id:0})
$mod
余数查找
找出年龄为单数的文档 除2余数等于1
db.class1.find({age:{$mod:[2,1]}},{_id:0})
$type
找出指定数据类型的文档
查找name域值类型为2的文档
db.class1.find({name:{$type:2}},{_id:0})
查找结果的操作函数(去重)
db.collection.distinct(filed)
功能: 查看某个域的值范围
获取某个域的值,去重
db.class0.distinct('age')
pretty()
功能:格式化显示查询结果(一团一条信息显示)
db.class0.find().pretty()
limit(n)
功能:显示前n条结果
显示查询结果前三条
db.class0.find({},{_id:0}).limit(3)
skip(n)
功能: 跳过前n条显示后面的查询结构
跳过前5条文档,显示后面的查询结果
db.class0.find({},{_id:0}).skip(5)
count()
功能 : 统计查询结果数量
* 在统计数量时要给出一定query条件
统计性别为w的文档个数
db.class0.find({sex:'w'},{_id:0}).count()
sort({field: 1/-1})
功能: 查找结果排序
参数: 以键值对表示按照哪个field排序
1 表示升序,-1表示降序
查找结果按照降序排序
db.class0.find({},{_id:0}).sort({age:-1})
复合排序
按照年龄升序排序,年龄相同时按照姓名降序
db.class0.find({},{_id:0}).sort({age:1,name:-1})
函数的连续调用
db.class0.find({},{_id:0}).sort({age:1}).limit(3)
操作符用法文档查找
www.mongodb.com ---> docs ---->search
在这里插入代码片
bson ---》json -----》 JavaScript
值类型 数值
整型 整数 1 2 3 -1 -3
布尔类型 true false
浮点型 小数 1.234
Array 数组 [1, 2, 3]
Timestamp 时间戳
Date 时间日期
Object 内部文档
Null null 空值
String 字符串
Symbol 特殊字符串
Binary data 二进制字符串
code 代码
regex 正则表达式
ObjectId ObjectId对象(自动生成ID标记)
ObjectId 自动生成ID标记
"_id" : ObjectId("5b764646d4ff0ad8f415f977")
_id : 如果在插入文档时没有指定_id域, 则系统会自动添加该域作为主键。值则是一个ObjectId类型数据
_id : 当 mongodb 插入文档时如果不指定_id域则自动生成)id域. 值如果不是自己指定即会自动生成一个ObjectId值
24 位 16进制数 使用ObjectId经过算法处理保证其唯一性(保证所有的_id值的唯一性)
前8位的 文档创建时间 6位 机器ID 4位 进程id 后6位计数器
Type Number Alias Notes
Double 1 “double”
String 2 “string”
Object 3 “object”
Array 4 “array”
Binary data 5 “binData”
Undefined 6 “undefined” Deprecated.
ObjectId 7 “objectId”
Boolean 8 “bool”
Date 9 “date”
Null 10 “null”
Regular Expression 11 “regex”
DBPointer 12 “dbPointer” Deprecated.
JavaScript 13 “javascript”
Symbol 14 “symbol” Deprecated.
JavaScript(with scope) 15 “javascriptWithScope”
32-bit integer 16 “int”
Timestamp 17 “timestamp”
64-bit integer 18 “long”
Decimal128 19 “decimal” New in version 3.4.
Min key -1 “minKey”
Max key 127 “maxKey”
查找所有内容
db.collection.find() ----> select * from table
find(query,field)
功能 : 查找文档
参数 : query 查找条件,相当于where子句
field 查找的域
返回值 : 查找到的所有文档
query : 以键值对方式传递参数,如果是空{}表示查找所有内容
e.g. 查找所有性别为w的文档
db.class0.find({sex:'w'})
field : 以键值对的方式给出要查找(不查找)的域
以域名为键,以0,1为值分别表示不查找和查找
* 如果某一个或多个域设置为0 表示这些域不查找,其他域均查找
* 如果某一个或多个域设置为1 表示这些域查找,其他域均不查找
* _id 除非设置为0 否则均会查找
* 除_id域其他域不能有的设置1有的设置0**