一、建库
use DATABASE_NAME
此时在列表中还查不到该库,需插入数据才能看到。
这里没有建表,会自动生成lttest表。
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
二、删库
use DATABASE_NAME
db.dropDatabase()
三、创建集合
db.createCollection(NAME, OPTIONS)
NAME:集合名称
OPTIONS:集合参数
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
![](https://i-blog.csdnimg.cn/blog_migrate/d6d77175b2c726a709c8b4e2fc0ab28d.png)
四、删除集合
db.COLLECTION.drop()
五、插入文档
db.COLLECTION_NAME.insert(DECUMENT)
![](https://i-blog.csdnimg.cn/blog_migrate/adda70b7b5f458c565f046d4121d7ec8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7fc5be58b38fc7313689d02184e9607e.png)
3.2以后还有以下两种语法可以插入文档:
db.DOCUMENT_NAME.insertOne(DOCUMENT) :向指定集合中插入一条文档数据
db.DOCUMENT_NAME.insertMany([DOCUMENT]) :向指定集合插入多条文档数据
![](https://i-blog.csdnimg.cn/blog_migrate/3e69a64b156138e491248bd27b3709ee.png)
六、更新数据
db.DOCUMENT_NAME.update(
<query>,
<update>,
{
upsert:<boolean>,
multi:<boolean>,
writeConcern:<document>
}
)
query:更新数据的查询条件
update:更新操作符(如$,$inc,$set)+需要修改的数据。可以理解为sql中的set
upsert:可选,如果不存在update的记录,true会插入一条新的记录。默认是false
multi:可选,true会更新全部查询出来的记录。默认false,只更新查出来的第一条
writeConcern:可选,抛出异常的级别
save方法会根据“_id”去替换文档。
db.DOCUMENT_NAME.save(
DOCUMENT,
{
writeConcern:<document>
}
)
DOCUMENT:替换后的文档
writeConcern:可选,抛出异常的级别
七、删除文档
db.DOCUMENT_NAME.remove(
<query>,
{
justOne : <boolean>,
writeConcern : <document>
}
)
query:可选,需删除文档的查询条件
justOne:可选,设为true或1,只删除第一个文档。默认false
writeConcern:可选,抛出异常级别。
八、查询文档
db.DOCUMENT_NAME.find(<query>,<projection>)[.pretty()]
db.DOCUMENT_NAME.findOne(<query>,<projection>)[.pretty()]
query:可选,查询条件
projection:可选,用于投影操作符指定返回的键。查询时返回文档中所有键值时,忽略此参数
.pretty():方法可以以格式化来显示所有文档
projection指定_id为false或0,则过滤掉_id不显示:
projection指定_id为true或1,则只显示_id:
1、MongoDB条件操作符
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } | db.col.find({"by":"菜鸟教程"}).pretty() | where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
2、MongoDB关系运算符
and:find方法可以传入多个参数,用逗号隔开。
db.col.find({key1:value1, key2:value2}).pretty()
or:使用关键字$or
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
![](https://i-blog.csdnimg.cn/blog_migrate/cb534a98a497b91c6450d16c67d78bbf.png)
3. MongoDB的$type操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
这里我们把tuotuo的年龄改成String字符串,用于做区别
数据类型与$type编号对应关系如下:
类型 | 数字 | 备注 |
---|---|---|
Double | 1 | |
String | 2 | |
Object | 3 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已废弃。 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript (with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Query with -1. |
Max key | 127 |
4. MongoDB的limit方法
db.COLLECTION_NAME.find().limit(NUMBER)
MongoDB的limit方法可以限制查询结果的条数。
5、MongoDB的skip方法
MongoDB的skip方法用于跳过指定数量条数的数据。可以与limit配合实现分页。
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
![](https://i-blog.csdnimg.cn/blog_migrate/012d42f50dab6fc88c2bb1806525d67b.png)
6、MongoDB的sort方法
排序。
db.COLLECTION_NAME.find().sort({KEY:1})
KEY指定排序的字段,使用1(升序)和-1(降序)执行排序方式。
7. 索引
如果没有索引,MongoDB要扫描集合中的每个文档,并符合查询条件的记录,效率很低。
索引是特殊的数据结构,存在一个易于遍历的数据集合中,是对集合中的一列或多列(符合索引)进行排序的一种数据结构。
MongoDB使用ensureIndex()方法创建索引。
db.COLLECTION_NAME.ensureIndex({KEY:1},<options>)
options:可选参数,如下
Parameter | Type | Description |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
dropDups | Boolean | 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |
![](https://i-blog.csdnimg.cn/blog_migrate/d8b343c44f7c42c700f6ea13047e8c3d.png)
8. 聚合
MongoDB可以使用aggregate()方法处理数据(求平均值,求和等)
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
AGGREGATE_OPERATION:聚合表达式
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 计算平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
9. 管道
Linux中可以用管道将上一个命令的结果作为参数给下一个命令。
MongoDB的聚合管道将文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作时可以重复的。
聚合框架中常用的操作有:
$project :修改输出的文档结构,可以重命名、增加、删除字段,也可以用于创建计算结果以及嵌套文档。(等同于find()的第二个JSON参数)
$match:用于过滤数据,只输出符合条件的文档。
$limit:用于限制文档数。
$skip:跳过指定的文档,返回剩下的文档。
$unwind:将文档中的某一数组类型的字段拆成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,用于统计结果。
$sort:排序。
$geoNear:输出接近某一地理位置的有序文档。
查age>1,<25的总记录数: