MongoDB 入门实战(3)--命令行

 本文主要介绍 MongoDB 命令行的使用,使用到的软件版本:MongoDB 5.0.5、Centos 7.6。

1、mongo 语法

mongo 命令在 bin 目录下,用法如下:

./mongo [options] [db address] [file names (ending in .js)]

常用参数:

--host 主机
--port 端口
-u [ --username ] 用户名
-p [ --password ] 密码

详细的说明可查看帮助:

./mongo -h

例子:

cd $MONGODB_HOME/bin
./mongo

2、命令

2.1、数据库

A、切换数据库(没有会先创建数据库):use DATABASE_NAME
B、删除数据库:db.dropDatabase():

例子:

> use testdb
> db.dropDatabase()

2.2、集合

A、创建集合

db.createCollection(name, options)

name: 集合名称
options: 可选参数,如下所示:

字段类型描述
capped 布尔 是否创建固定集合;如果为 true,必须指定 size 参数。
size 数值 固定集合的大小。
max 数值 固定集合包含的最大文档数。

B、列出集合:show collections

C、删除集合:db.collection.drop()

例子:

> use testdb
> db.createCollection('col1')
> show collections
> db.col1.drop()

2.3、文档

2.3.1、创建文档

插入一个文档:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

插入多个文档:

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

参数说明:
document:要写入的文档。
writeConcern:写入策略,是否需确认写操作;1:需确认,0 无需确认;默认为 1。
ordered:是否按顺序写入,默认 true。

例子:

> db.col1.insertOne({name:'jack',age:20})

2.3.2、更新文档

更新第一个匹配的文档:

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

更新所有匹配的文档:

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

参数说明:
filter: 查询条件,类似 sql 的 where 条件
update: 更新的对象,可理解为 sql 的 set 子句
upsert: 可选,如果查询不到文档,是否插入更新的文档;默认 false
writeConcern: 可选,写入策略,是否需确认写操作;1:需确认,0 无需确认
collation: 可选,排序规则
arrayFilters: 过滤器
hint: 查询时使用索引

例子:

> db.col1.updateOne({name:'jack'},{$set:{name:'jack2',age:22}})

2.3.3、删除文档

删除第一个匹配的文档:

db.collection.deleteOne(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>,
      hint: <document|string>        // Available starting in MongoDB 4.4
   }
)

删除所有匹配的文档:

db.collection.deleteMany(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>
   }
)

参数说明:
filter: 查询条件,类似 sql 的 where 条件
writeConcern: 可选,写入策略,是否需确认写操作;1:需确认,0 无需确认
collation: 可选,排序规则
hint: 查询时使用索引

例子:

> db.col1.deleteOne({name:'jack2'})

2.3.4、查询文档

查询第一个匹配的文档:

db.collection.findOne(query, projection)

查询所有匹配的文档:

db.collection.find(query, projection)

参数说明:
query:可选,查询条件
projection:可选,指定查询返回的键

例子:

> db.col1.find()
> db.col1.find({},{_id:0})

2.3.5、条件操作符

MongoDB 与 SQL 中条件操作符的比较:

操作格式范例RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"name":"jack"}).pretty() where by = 'jack'
小于 {<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

MongoDB AND 条件:传入多个字段,字段之间为 and 的关系。

db.col.find({key1:value1, key2:value2})

MongoDB OR 条件:通过 $or 关键字来实现。

db.col.find({$or: [{key1: value1}, {key2:value2}]}

例子:

> db.col1.find({name:'jack',age:{$lt:50}})  #相当于 name='jack' and age<50

> db.col1.find({age:{$lt:50},$or:[{name:'jack'},{name:'luci'}]})  #相当于 age<50 and (name='jack' or name='luci') 

2.3.6、$type 操作符

 $type 操作符用于检索匹配的数据类型。

例子:

> db.col1.find({name:{$type:'string'}})

> db.col1.find({name:{$type:2}})

2.3.7、MongoDB skip 与 limit方法

skip 表示跳过指定数量的文档,limit 表示读取指定数量的文档。

例子:

> db.col1.find().skip(1).limit(2)

2.3.8、MongoDB 排序

MongoDB 中使用 sort() 方法对数据进行排序

db.COLLECTION_NAME.find().sort({KEY:1})

1 表示升序,-1 表示降序

例子:

> db.col1.find().sort({name:1})

2.3.9、MongoDB 聚合

MongoDB 中使用 aggregate 方法来实现聚和功能:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

相应聚合的表达式如下:

表达式描述实例类似 SQL
$sum 计算总和 db.col1.aggregate([{$group: {_id: "$name", num: {$sum : "$age"}}}]) select name,sum(age) from col1 group by name
db.col1.aggregate([{$group: {_id: "$name", num: {$sum : 1}}}]) select name,count(*) from col1 group by name
$avg 计算平均值 db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}}]) select name,avg(age) from col1group by name
$min 获取最小值。 db.col1.aggregate([{$group: {_id: "$name", num: {$min: "$age"}}}]) select name,min(age) from col1group by name
$max 获取最大值 db.col1.aggregate([{$group: {_id: "$name", num: {$max: "$age"}}}]) select name,max(age) from col1group by name
$first 获取第一条数据 db.col1.aggregate([{$group: {_id: "$name", num: {$first: "$age"}}}])  
$last 获取最后一条数据 db.col1.aggregate([{$group: {_id: "$name", num: {$last: "$age"}}}])  

管道的概念:

MongoDB 的聚合管道将 MongoDB 文档在一个管道处理完毕后将结果传递给下一个管道处理。MongoDB 聚合中常用的操作:

$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。
$limit:只返回指定的文档数。
$skip:跳过指定的文档数。
$group:将文档分组,可用于数据统计。
$sort:文档排序输出。

例子:

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$project:{num:0}}])

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$match:{_id:'jack'}}])

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$limit:2}])

> db.col1.aggregate([{$group: {_id: "$name", num: {$avg: "$age"}}},{$sort:{num:1}}])

2.4、索引

2.4.1、创建索引

db.collection.createIndex(keys, options, commitQuorum)

keys:指定创建索引的字段及索引方式(按升序创建索引还是按降序创建索引;1:升序,-1:降序)
options:可选参数
commitQuorum:确定提交的仲裁数量

可选参数如下:

参数类型描述
background Boolean 4.2 版本已废弃。是否阻塞对聚合的其他操作。
unique Boolean 是否为唯一索引,默认 false。
name string 索引名称,如果未指定,则通过拼接索引的字段名和排序方式来生成索引名称。
sparse Boolean 如果为 true,则索引仅引用具有指定字段的文档。默认值为 false。
expireAfterSeconds integer 设置集合的存在时间,单位为秒。
weights document 对于文本索引,指定索引权重,1 到 99999 之间,表示该索引字段相对于其他索引字段的得分权重;可以为部分或全部索引字段指定权重。
default_language string 对于文本索引,指定语言; 默认为英语。
language_override string 对于文本索引,指定覆盖的语言,默认值为 language。

 例子:

> db.col1.createIndex({name:1})

2.4.2、查询索引

db.collection.getIndexes()

例子:

> db.col1.getIndexes()

2.4.3、删除索引

db.col.dropIndex(INDEX_NAME)
db.col.dropIndexes()

例子:

> db.col1.dropIndex('name_1')

> db.col1.dropIndexes()

2.5、权限

2.5.1、创建用户

db.createUser(user, writeConcern)

user: 用户信息
writeConcern: 可选,写入策略,是否需确认写操作;1:需确认,0 无需确认

例子:

> use testdb
> db.createUser({
...   user: 'test',  
...   pwd: '123456', 
...   roles:[{
...     role: 'dbOwner',  
...     db: 'testdb'  
...   }]
... })

2.5.2、更新用户

db.updateUser(username, update, writeConcern)

username: 用户名
update: 更新信息
writeConcern: 可选,写入策略,是否需确认写操作;1:需确认,0 无需确认

例子:

> db.updateUser('test',{pwd:'1234567'})

2.5.3、删除用户

db.dropUser(username, writeConcern)

username: 用户名
writeConcern: 可选,写入策略,是否需确认写操作;1:需确认,0 无需确认

2.5.4、认证

如何数据库开启的权限认证(启动时增加 --auth 参数),则需要先认证再执行相应的操作:

db.auth(<username>, <password>)

posted @ 2022-03-05 10:40  且行且码  阅读(999)  评论(0编辑  收藏  举报