mongodb与mysql区别**
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
数据库
一个mongodb可以建立多个数据库。
默认数据库为“db”,该数据库存储在data目录中。
- admin: 从权限的角度来看,这是"root"数据库。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
//显示所有数据库
show dbs
//查看当前数据库
db
//连接到一个制定的数据库
use local(local 数据库名称)
//删除
db.dropDatabase()
集合
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
//创建集合
db.createCollection(name, options)
//查看集合
show collections
//删除集合
db.collection.drop()
字段 | 类型 | 描述 |
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量 |
文档
文档是一组键值(key-value)对。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别。
RDBMS | MongoDB |
数据库 | 数据库 |
表格 | 集合 |
行 | 文档 |
列 | 字段 |
表联合 | 嵌入文档 |
主键 | 主键 (MongoDB 提供了 key 为 _id ) |
插入文档
//插入文档(col是集合名)
db.col.insert({
username: 'jing',
password: '123456',
})
//也可以将数据定义为一个变量
document =({
username:'jing',
password:'123456'
})
db.col.insert(document)
//插入多条文档数据
db.col.insertMany([{"a": 1}, {'b': 2}])
区分多条和多个字段
更新文档update
这个目前有点懵,先看一下语法结构
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 :可选,抛出异常的级别
例子:
//where a = 1 时 , 将第一条符合匹配的数据b改为‘genggai’
db.col.update({"a": 1}, {$set:{'b': 'genggai'}})
//where a = 1 时 , 将所有符合匹配的数据b改为‘genggai’
db.col.update({"a": 1}, {$set:{'b': 'genggai'}},{multi:true})
效果:
更新文档save
替换了_id为5eba64e52006681daabd0831的文档
db.col.save({
... "_id":ObjectId("5eba64e52006681daabd0831"),
... "a":"save",
... "b":"save"})
删除文档
db.collection.remove(
<query>,
<justOne>:如果设为 true或1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
)
//例子:
//删除所有符合条件的文档
db.col.remove({'a':'save'})
//删除第一个符合条件的文档
db.col.remove({'a':'save'},1)
查询文档
db.collection.find(query, projection)
//查询col集合里面所有的文档
db.col.find().pretty()
语句比较 -- 条件操作符
操作 | 操作符 | 范例 | 等价于 |
等于 |
| db.col.find({"a":1}).pretty() | where a = 1 |
小于 | lt | db.col.find({"a":{$lt:5}}).pretty() | where a < 5 |
小于或等于 | lte | db.col.find({"a":{$lte:5}}).pretty() | where a <= 50 |
大于 | gt | db.col.find({"a":{$gt:5}}).pretty() | where a > 50 |
大于或等于 | gte | db.col.find({"a":{$gte:5}}).pretty() | where a >= 50 |
不等于 | ne | db.col.find({"a":{$ne:5}}).pretty() | where a != 50 |
and 条件并
db.col.find({key1:value1, key2:value2}).pretty()
//例子
db.col.find({a:3, b:"123456}).pretty()
//等价于mysql
where a = 3 and b = "123456"
或者or ($or)
//where a = 3 or b = "123456"
db.col.find({$or:[{"a":3},{"b": "123456"}]}).pretty()
今天先到这里😭