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
值大于0
的成员)的确认 -
j:
要求得到Mongodb
的写操作已经写到硬盘日志的确认
比如:
j=true
:要求得到Mongodb
(w
指定的实例个数)的写操作已经写到硬盘日志的确认。j=true
本身并不保证 因为副本集故障而不会回滚。 -
wtimeout
:指定write concern
的时间限制,只适用于w>1
的情况
wtimeout
在超过指定时间后写操作会返回error
,即使写操作最后执行成功,当这些写操作返回时,MongoDB
不会撤消在wtimeout
时间限制之前执行成功的数据修改。
如果未指定wtimeout
选项且未指定write concern
级别,则写入操作将无限期阻止。 指定wtimeout
值为0
等同于没有wtimeout
选项。
2.4 数据删除
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
query
:(可选)删除的文档的条件。justOne
: (可选)如果设为true
或1
,则只删除一个文档,如果不设置该参数,或使用默认值false
,则删除所有匹配条件的文档。writeConcern
:(可选)用来指定mongod
对写操作的回执行为。