文章目录
- 连接数据库
- 创建数据库
- 删除数据库
- 创建集合
- 删除集合
- 插入文档
- 更新文档
- save()方法
- 删除文档
- 查询文档
- $type 操作符
- Limit与Skip方法
- 排序
- 索引
- 聚合
连接数据库
标准 URI 连接语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
- mongodb:// 这是固定的格式,必须要指定
- username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
- host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
- portX 可选的指定端口,如果不填,默认为27017
- /database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
- ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
连接实例:
1
2
3
4 1使用用户名fred,密码foobar登录localhost的baz数据库。
2mongodb://fred:foobar@localhost/baz
3
4
创建数据库
语法:use DATABASE_NAME
查看所有数据库
show dbs
删除数据库
语法:db.dropDatabase() //删除当前所在数据库
创建集合
语法:db.createCollection(name, options)
参数说明:
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
删除集合
语法:db.collection.drop()
插入文档
文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式,BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,
语法:db.COLLECTION_NAME.insert(document)
db.collection.insertOne():插入一条文档
db.collection.insertMany:插入多条文档
更新文档
mongodb可以使用update()和save()方法更新集合中的文档
update()方法
语法格式:
1
2
3
4
5
6
7
8
9
10
11 1db.collection.update(
2 <query>,
3 <update>,
4 {
5 upsert: <boolean>,
6 multi: <boolean>,
7 writeConcern: <document>
8 }
9)
10
11
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
save()方法
save() 方法通过传入的文档来替换已有文档
语法格式:
1
2
3
4
5
6
7
8 1db.collection.save(
2 <document>,
3 {
4 writeConcern: <document>
5 }
6}
7
8
参数说明:
- document:文档数据
- writeConcern:可选,抛出异常的级别
3.2版本开始,支持更新单个或者多个文档
- db.collection.updateOne() 向指定集合更新单个文档
- db.collection.updateMany() 向指定集合更新多个文档
删除文档
MongoDB remove()函数是用来移除集合中的数据。MongoDB数据更新可以使用update()函数。在执行remove()函数前先执行find()命令来判断执行的条件是否正确。
语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1db.collection.remove(
2 <query>,
3 <justOne>
4)
52.6版本后
6db.collection.remove(
7 <query>,
8 {
9 justOne: <boolean>,
10 writeConcern: <document>
11 }
12)
13
14
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
官方推荐使用:
deleteOne()
deleteMany()
查询文档
MongoDB 查询文档使用 find() 方法。
语法格式:
1
2
3 1db.collection.find(query, projection)
2
3
参数说明:
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
以易读的方式读取数据
1 | 1` |
>db.col.find().pretty()
MongoDB 与 RDBMS Where 语句比较
and条件:
db.col.find({key1:value1, key2:value2}).pretty()
or条件
1
2
3
4
5
6
7
8
9 1>db.col.find(
2 {
3 $or: [
4 {key1: value1}, {key2:value2}
5 ]
6 }
7).pretty()
8
9
$type 操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
使用实例:
1
2
3
4
5 1#获取 "col" 集合中 title 为 String 的数据
2db.col.find({"title" : {$type : 'string'}})
3
4
5
Limit与Skip方法
limit():接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法:
db.COLLECTION_NAME.find().limit(NUMBER)
Skip():跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
语法:
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
注意:
skip和limit方法只适合小数据量分页,如果是百万级效率就会非常低,因为skip方法是一条条数据数过去的,建议使用where_limit,或者结合操作符
使用实例:
1
2
3
4
5
6
7 1#读取从 10 条记录后 100 条记录,相当于 sql 中limit (10,100)
2> db.COLLECTION_NAME.find().skip(10).limit(100)
3
4#查寻第100001条数据,这条数据的Amount值是:2399927
5db.test.find({amount:{$gt:2399927}}).sort({"amount":1}).limit(10) //53ms
6
7
排序
sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
语法:
db.COLLECTION_NAME.find().sort({KEY:1})
索引
创建索引语法:
db.collection.createIndex(keys, options)
可选参数:
辅助命令:
1
2
3
4
5
6
7
8
9
10
11
12
13 1# 查看集合索引
2db.col.getIndexes()
3
4# 查看集合索引大小
5db.col.totalIndexSize()
6
7# 删除集合所有索引
8db.col.dropIndexes()
9
10# 删除集合指定索引
11db.col.dropIndex("索引名称")
12
13
聚合
MongoDB中聚合(aggregate)主要用于处理数据,并返回计算后的数据结果
语法:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
常用聚合表达式: