1 创建、删除集合
mongo 默认可以不用创建集合的,当插入数据时,如果指定的集合不存在,会自行创建。也可以直接创建。区别是直接创建可以增加可选参数,指定其大小,文档数量。
创建
db.createCollection(name, options)
db.createCollection("test");
db.createCollection("test", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
删除
db.collection.drop()
options 可以是如下参数:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
当创建集合时,为固定集合时,不能进行修改、删除
2 数据的CRUD
(1)添加数据 通过 db.$collection_name.insert() 或save 进行添加操作,也可以直接插入一个数组。
db.test.insert(document)
或
db.test.save(document)
单个文档
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
多个文档
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
参数说明:
document:要写入的文档。
writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
ordered:指定是否按顺序写入,默认 true,按顺序写入。
(2) 更新数据,通过db.update(where,set,{}) 进行更新,语法如下
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
更新时需要注意update 的两种方式,$set 和$inc , $set 设置更新的内容,也可以是指定,默认使用,$inc 是对数字的的操作,通过正负数进行加减操作。
- WriteConcern.NONE:没有异常抛出
- WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
- WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
- WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
- WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
- WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
- WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。
(3)删除数据 通过 db.$collection.remove(where,{}) 进行
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
删除全部数据
db.col.remove({})
(4)查询数据 通过 db.collection.find(where, {})
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
美化输出
db.col.find().pretty()
(5)过滤条件 多个条件时
AND 通过逗号进行多条件组合
db.col.find({key1:value1, key2:value2}).pretty()
OR 通过 $or 的方式
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
AND OR 同时存在
db.col.find(
{"age": {$gt:50},
$or: [{"name": "zhangsan"},{"title": "测试"}]
}).pretty()
相当于 where age >50 and (name='zhangsan' or title='测试')
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } | db.col.find({"name":"hello"}).pretty() | where name = 'hello' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"age":{$lt:50}}).pretty() | where age < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"age":{$lte:50}}).pretty() | where age <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"age":{$gt:50}}).pretty() | where age > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"age":{$gte:50}}).pretty() | where age >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"age":{$ne:50}}).pretty() | where age != 50 |
总结,mongo 的增删改查同RDBMS 很像,mongo 的用法更像调用函数,和js 的语法很像,所有如果有基础,学习起来很简单。需要注意的点就是update 和save 可以通过参数来通知如果文档不存在是否插入操作。同时对数字的加减使用$inc ,对或条件使用$or 。