1. MongoDB 的基本操作
-- 查看数据库
sd
-- 切换数据库 如果没有对应的数据库则创建
use 数据库名
-- 创建集合
db.createCollection("集合名")
-- 查看集合
show tables
show collections
-- 删除集合
db.集合名.drop()
-- 删除当前数据库
db.dropDatabase()
2. MongoDB 集合数据操作(CURD)
2.1 数据添加
-
文档的数据结构和插入单条数据 db.集合名.insert(文档)
JSON
基本一样。
所有存储在集合中的数据都是
格式。BSON
是一种类BSON
的一种二进制形式的存储格式,简称json
。Binary JSON
- 例子
没有指定db.resume_preview.insert({name:"张晓峰",birthday:new ISODate("2000-07- 01"),expectSalary:15000,gender:0,city:"bj"})
这个字段系统会自动生成,也可以指定_id
_id
类型是_id
类型是一个ObjectId
字节12
类型数据,有以下格式:BSON
- 前
个字节表示时间戳4
来获取ObjectId("对象Id字符串").getTimestamp()
- 接下来的
个字节是机器标识码3
- 紧接的两个字节由进程
组成(id
)PID
- 最后三个字节是随机数
- 前
- 插入多条数据
db.集合名.insert([文档,文档])
2.2 数据查询
2.2.1 比较条件查询
db.集合名.find(条件)
操作 | 条件格式 | 例子 | RDBMS 中的条件 |
---|---|---|---|
等于 | {key:value} | db.col.find({字段名:值}).pretty() | where 字段名 = 值 |
大于 | {key:{$gt:value}} | db.col.find({字段名:{$gt:值}}).pretty() | where 字段名 > 值 |
小于 | {key:{$lt:value}} | db.col.find({字段名:{$lt:值}}).pretty() | where 字段名 < 值 |
大于等于 | {key:{$gte:value}} | db.col.find({字段名:{$gte:值}}).pretty() | where 字段名 >= 值 |
小于等于 | {key:{$lte:value}} | db.col.find({字段名:{$lte:值}}).pretty() | where 字段名 <= 值 |
不等于 | {key:{$ne:value}} | db.col.find({字段名:{$ne:值}}).pretty() | where 字段名 != 值 |
2.2.2 逻辑条件查询
-
条件and
的MongoDB
方法可以传入多个键(find()
),每个键(key
) 以逗号隔开,即常规key
的SQL
条件AND
db.集合名.find({key1:value1, key2:value2}).pretty()
-
条件or
db.集合名.find({$or:[{key1:value1}, {key2:value2}]}).pretty()
-
条件not
db.集合名.find({key:{$not:{$操作符:value}}).pretty()
2.2.3 分页查询
db.集合名.find({条件}).sort({排序字段:排序方式})).skip(跳过的行数).limit(一页显示多少数据)
2.3 数据更新
$set :设置字段值
$unset :删除指定字段
$inc:对修改的值进行自增
db.集合名.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
})
参数说明:
-
:query
的查询条件,类似update
查询内sql update
后面的。where
-
update
的对象和一些更新的操作符(如update
)等,也可以理解为$set,$inc...
中sql update
后面的set
-
可选,这个参数的意思是,如果不存在upsert
的记录,是否插入update
,objNew
为插入,默认 是true
,不插入。false
-
multi
可选,
默认是MongoDB
,只更新找到的第一条记录,如果这个参数为false
,就把按条件查 出来多条记录全部更新。true
-
可选,用来指定writeConcern
mongod
对写操作的回执行为,比如写的行为是否需要确认。
举例:
db.集合名.update({条件},{$set:{字段名:值}},{multi:true})
writeConcern
包括以下字段:
{ w: <value>, j: <boolean>, wtimeout: <number> }
-
w:
指定写操作传播到的成员数量
比如:
(默认):则要求得到写操作已经传播到独立的w=1
实例或副本集的Mongod
成员的确认primary
:则不要求确认写操作,可能会返回w=0
和socket exceptions
networking errors
:要求得到写操作已经传播到大多数具有存储数据具有投票的(w="majority"
)成员(也就是data-bearing voting
值大于 的成员)的确认members[n].votes
-
要求得到j:
Mongodb
的写操作已经写到硬盘日志的确认
比如:
:要求得到j=true
(Mongodb
指定的实例个数)的写操作已经写到硬盘日志的确认。w
本身并不保证 因为副本集故障而不会回滚。j=true
-
:指定wtimeout
的时间限制,只适用于write concern
的情况w>1
在超过指定时间后写操作会返回wtimeout
,即使写操作最后执行成功,当这些写操作返回时,error
不会撤消在MongoDB
wtimeout
时间限制之前执行成功的数据修改。
如果未指定
选项且未指定wtimeout
级别,则写入操作将无限期阻止。 指定write concern
值为 等同于没有wtimeout
选项。wtimeout
2.4 数据删除
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
-
:(可选)删除的文档的条件。query
-
: (可选)如果设为justOne
或true
,则只删除一个文档,如果不设置该参数,或使用默认值1
,则删除所有匹配条件的文档。false
-
:(可选)用来指定writeConcern
对写操作的回执行为。mongod