吉地宝长白山特产 發表於 2024-4-17 09:52:18

mongodb命令行连接及基础命令总结大全

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、命令行连接到mongodb</a></li><li><a href="#_label1">二、基础命令</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">2.1 数据库操作</a></li><li><a href="#_lab2_1_1">2.2 集合的基础命令</a></li><li><a href="#_lab2_1_2">2.3 插入</a></li><li><a href="#_lab2_1_3">2.4 保存</a></li><li><a href="#_lab2_1_4">2.5 查询</a></li><li><a href="#_lab2_1_5">2.6 更新</a></li><li><a href="#_lab2_1_6">2.7 删除</a></li><li><a href="#_lab2_1_7">2.8 比较运算符</a></li><li><a href="#_lab2_1_8">2.9 范围运算符</a></li><li><a href="#_lab2_1_9">2.10 逻辑运算符</a></li><li><a href="#_lab2_1_10">2.11 正则表达式</a></li><li><a href="#_lab2_1_11">2.12 limit和skip()</a></li><li><a href="#_lab2_1_12">2.13 排序</a></li><li><a href="#_lab2_1_13">2.14 统计个数</a></li><li><a href="#_lab2_1_14">2.15 消除重复</a></li></ul><li><a href="#_label2">三、聚合函数操作</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_15">3.1常用管道</a></li><li><a href="#_lab2_2_16">3.2 表达式</a></li><li><a href="#_lab2_2_17">3.3 $group</a></li><li><a href="#_lab2_2_18">3.4 $project</a></li><li><a href="#_lab2_2_19">3.5 $match</a></li><li><a href="#_lab2_2_20">3.6 $sort</a></li><li><a href="#_lab2_2_21">3.7 $limit</a></li><li><a href="#_lab2_2_22">3.8 $skip</a></li><li><a href="#_lab2_2_23">3.9 $unwind</a></li></ul><li><a href="#_label3">总结&nbsp;</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、命令行连接到mongodb</h2>
<p>我们先来简单的看一下mongosh命令:</p>
<div class="jb51code"><pre class="brush:ps;">root@bddff4197a79:/# mongosh --help

$ mongosh

Options:

    -h, --help                                 Show this usage information
    -f, --file                            Load the specified mongosh script
      --host                            Server to connect to
      --port                            Port to connect to
      --version                              Show version information
      --verbose                              Increase the verbosity of the output of the shell
      --quiet                              Silence output from the shell during the connection process
      --shell                              Run the shell after executing files
      --nodb                                 Don't connect to mongod on startup - no 'db address' expected
      --norc                                 Will not run the '.mongoshrc.js' file on start up
      --eval                            Evaluate javascript
      --retryWrites                        Automatically retry write operations upon transient network errors

Authentication Options:

    -u, --username                      Username for authentication
    -p, --password                      Password for authentication
      --authenticationDatabase          User source (defaults to dbname)
      --authenticationMechanism       Authentication mechanism
      --awsIamSessionToken              AWS IAM Temporary Session Token ID
      --gssapiServiceName             Service name to use when authenticating using GSSAPI/Kerberos
      --sspiHostnameCanonicalization    Specify the SSPI hostname canonicalization (none or forward, available on Windows)
      --sspiRealmOverride             Specify the SSPI server realm (available on Windows)

TLS Options:

      --tls                                  Use TLS for all connections
      --tlsCertificateKeyFile           PEM certificate/key file for TLS
      --tlsCertificateKeyFilePassword Password for key in PEM file for TLS
      --tlsCAFile                       Certificate Authority file for TLS
      --tlsAllowInvalidHostnames             Allow connections to servers with non-matching hostnames
      --tlsAllowInvalidCertificates          Allow connections to servers with invalid certificates
      --tlsCertificateSelector          TLS Certificate in system store (Windows and macOS only)
      --tlsCRLFile                      Specifies the .pem file that contains the Certificate Revocation List
      --tlsDisabledProtocols          Comma separated list of TLS protocols to disable

API version options:

      --apiVersion                      Specifies the API version to connect with
      --apiStrict                            Use strict API version mode
      --apiDeprecationErrors               Fail deprecated commands for the specified API version

FLE Options:

      --awsAccessKeyId                AWS Access Key for FLE Amazon KMS
      --awsSecretAccessKey              AWS Secret Key for FLE Amazon KMS
      --awsSessionToken                 Optional AWS Session Token ID
      --keyVaultNamespace             database.collection to store encrypted FLE parameters
      --kmsURL                          Test parameter to override the URL of the KMS endpoint

DB Address Examples:

      foo                                    Foo database on local machine
      192.168.0.5/foo                        Foo database on 192.168.0.5 machine
      192.168.0.5:9999/foo                   Foo database on 192.168.0.5 machine on port 9999
      mongodb://192.168.0.5:9999/foo         Connection string URI can also be used

File Names:

      A list of files to run. Files must end in .js and will exit after unless --shell is specified.

Examples:

      Start mongosh using 'ships' database on specified connection string:
      $ mongosh mongodb://192.168.0.5:9999/ships

For more information on usage: https://docs.mongodb.com/mongodb-shell.
</pre></div>
<p><strong>可以看到mongosh有非常多的参数,下面我们演示几个比较常用的参数来测试连接mongo</strong>连接到mongodb命令</p>
<ul><li>&ndash;host为远程服务器地址及端口</li><li>-u为用户名</li><li>-p为密码</li></ul>
<div class="jb51code"><pre class="brush:ps;">mongosh --host localhost:27017 -u root -p 'yourpassword'
</pre></div>
<p>如果没有密码可直接使用</p>
<div class="jb51code"><pre class="brush:ps;">mongosh --host localhost:27017
</pre></div>
<p>demo:</p>
<div class="jb51code"><pre class="brush:ps;">root@bddff4197a79:/# mongosh --host localhost:27017
Current Mongosh Log ID:        654b58d5a9821e4d7bbbf493
Connecting to:                mongodb://localhost:27017/?directConnection=true&amp;serverSelectionTimeoutMS=2000
Using MongoDB:                5.0.5
Using Mongosh:                1.1.6

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting:
   2023-11-08T01:13:10.562+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
   2023-11-08T01:13:11.610+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

Warning: Found ~/.mongorc.js, but not ~/.mongoshrc.js. ~/.mongorc.js will not be loaded.
You may want to copy or rename ~/.mongorc.js to ~/.mongoshrc.js.
</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>二、基础命令</h2>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>2.1 数据库操作</h3>
<p>查看所有数据库</p>
<div class="jb51code"><pre class="brush:ps;">show dbs
</pre></div>
<p>查看当前所属数据库</p>
<div class="jb51code"><pre class="brush:ps;">db
</pre></div>
<p>切换数据库或创建数据库(存在则切换,不存在则创建)</p>
<div class="jb51code"><pre class="brush:ps;">use 数据库名
</pre></div>
<p>删除数据库</p>
<div class="jb51code"><pre class="brush:ps;">db.dropDatabase()
</pre></div>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>2.2 集合的基础命令</h3>
<p>不手动创建集合:</p>
<ul><li>向不存在的集合中第一次加入数据时,集合会被创建出来</li></ul>
<p>手动创建集合:</p>
<blockquote><p>db.createCollection(name, options)<br />db.createCollection(&ldquo;stu&rdquo;)<br />db.createCollection(&ldquo;stb&rdquo;, {capped:true, size:10})</p></blockquote>
<ul><li>参数crapped:默认值为false表示不设置上限,值为true表示设置上限</li><li>参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节</li></ul>
<p>查看集合:</p>
<div class="jb51code"><pre class="brush:ps;">show collections
</pre></div>
<p>删除结合:</p>
<div class="jb51code"><pre class="brush:ps;">db.集合名称.drop()
</pre></div>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>2.3 插入</h3>
<p>db.集合名称.insert(document)</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.insert({name:'zhangsan', gender:1})
db.stu.insert({_id:"20170101", name:'zhangsan', gender:1})
</pre></div>
<p>插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的Objectid</p>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>2.4 保存</h3>
<p>db.集合名称.save(document)</p>
<p>如果文档的_id已经存在则修改,如果文档的_id不存在则添加</p>
<p class="maodian"><a name="_lab2_1_4"></a></p><h3>2.5 查询</h3>
<p>方法 find() 查询全部</p>
<div class="jb51code"><pre class="brush:ps;">        db.集合名称.find({条件文档})
        db.stu.find({name:'zhangsan'})
</pre></div>
<p>方法 findOne() 查询只返回一个</p>
<div class="jb51code"><pre class="brush:ps;">    db.集合名称.findOne({条件文档})
    db.stu.findOne({age:20})
</pre></div>
<p>方法 pretty() 将结果格式化</p>
<div class="jb51code"><pre class="brush:ps;">    db.集合名称.find({条件文档}).pretty()
    db.stu.find({name:'zhangsan'}).pretty()
</pre></div>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>2.6 更新</h3>
<p>db.集合名称.update(,,{multi:})</p>
<p>1. 参数query:查询条件</p>
<p>2. 参数update:更新操作符</p>
<p>3. 参数multi:可选,默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新</p>
<div class="jb51code"><pre class="brush:ps;">        db.stu.update({name:'zhangsan', {name:'wangwu'}}) 更新匹配的第一条,其他值会被删除
    db.stu.update({name:'zhangsan', {$set:{name:'hys'}}}) 更新匹配的第一条,其他值不会被删除
    db.stu.update{{}, {$set:{gender:0}}, {multi:true}} 跟新全部,其他值不会被删除
</pre></div>
<p class="maodian"><a name="_lab2_1_6"></a></p><h3>2.7 删除</h3>
<p>db.集合名称.remove(, {justOne:})</p>
<p>1. 参数query:可选,删除文档的条件</p>
<p>2. 参数justOne:可选,如果设为true或1,则只删除一条,默认为false,表示删除多条</p>
<div class="jb51code"><pre class="brush:ps;">        db.stu.remove({name:'wangwu'}, {justOne:true}) 删除一条
        db.stu.remove({gender:2}) 删除全部
</pre></div>
<p class="maodian"><a name="_lab2_1_7"></a></p><h3>2.8 比较运算符</h3>
<p>等于:默认是等于判断,没有运算符</p>
<p>小于:&nbsp;l t ( l e s s t h a n ) 小于等于: lt (less than) 小于等于:&nbsp;lt(lessthan)小于等于:lte (less than equal)</p>
<p>大于:&nbsp;g t ( g r e a t e r t h a n ) 大于等于: gt (greater than) 大于等于:&nbsp;gt(greaterthan)大于等于:gte (greater than equal)</p>
<p>不等于:$ne (not equal)</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find({age: {$gte:18}})
</pre></div>
<p class="maodian"><a name="_lab2_1_8"></a></p><h3>2.9 范围运算符</h3>
<p>使用 &ldquo;&nbsp;i n &quot; , &quot; in&quot;, &quot;&nbsp;in&quot;,&quot;nin&rdquo; 判断是否在某个范围内</p>
<p>查询年龄为18、28的学生</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find({age:{$in:}})
</pre></div>
<p class="maodian"><a name="_lab2_1_9"></a></p><h3>2.10 逻辑运算符</h3>
<p>and:在json中写多个条件即可</p>
<p>查询年龄大于或等于18,并且性别为1的学生</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find({age:{$gte:18}, sex:1})
</pre></div>
<p>or:使用 &ldquo;$or&rdquo; ,值为数组,数组中每个元素为json</p>
<p>查询年龄大于18,或性别为1的学生</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find({$or:[{age:{$gt:18}}, {sex:1}]})
</pre></div>
<p>查询年龄大于18,或性别为1的学生,并且姓名是xiaoming</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find({$or:[{age:{$gt:18}}, {set:1}],name:'xiaoming'})
</pre></div>
<p class="maodian"><a name="_lab2_1_10"></a></p><h3>2.11 正则表达式</h3>
<p>使用 // 或 $regex 编写正则表达式</p>
<p>查询姓小的学生</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find({name:/^xiao/})
db.stu.find({name:{$regex:'^xiao'}})
</pre></div>
<p class="maodian"><a name="_lab2_1_11"></a></p><h3>2.12 limit和skip()</h3>
<p>方法limit():用于读取指定数量的文档</p>
<p>db.集合名称.find().limit(number)</p>
<p>查询2条学生信息</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find().limit(2)
</pre></div>
<p>方法skip():用于跳过指定数量的文档</p>
<p>db.集合名称.find().skip(number)</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find().skip(2)
</pre></div>
<p>同时使用</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find().limit(1).skip(2)
db.stu.find().limit(2).skip(1)
</pre></div>
<p class="maodian"><a name="_lab2_1_12"></a></p><h3>2.13 排序</h3>
<p>方法 sort() 用于对集合进行排列</p>
<p>db.集合名称.find().sort({字段:1,&hellip;})</p>
<ul><li>参数 1 为升序排列</li><li>参数 -1 位降序排列</li></ul>
<p>根据性别降序,再根据年龄升序</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find().sort({sex:-1,age:1})
</pre></div>
<p class="maodian"><a name="_lab2_1_13"></a></p><h3>2.14 统计个数</h3>
<p>方法 count() 用于统计结果集中文档条数</p>
<p>db.集合名称.find({条件}).count()</p>
<p>db.集合名称.count({条件})</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.find({sex:1}).count()
db.stu.count({age:{$gt:20},sex:1})
</pre></div>
<p class="maodian"><a name="_lab2_1_14"></a></p><h3>2.15 消除重复</h3>
<p>方法 distinct() 对数据进行去重</p>
<p>db.集合名称.distinct(&lsquo;去重字段&rsquo;,{条件})</p>
<div class="jb51code"><pre class="brush:ps;">db.stu.distinct('sex', {age: {$gt:18}})
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>三、聚合函数操作</h2>
<p class="maodian"><a name="_lab2_2_15"></a></p><h3>3.1常用管道</h3>
<p>在mongodb中,文档处理完毕后,通过管道进行下一次处理</p>
<p>常用的管道如下:</p>
<ul><li>$group:将集合中的文档分组,可用于统计结果</li><li>$match:过滤数据,只输出符合条件的文档</li><li>$project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果</li><li>$sort:讲输入文档排序后输出</li><li>$limit:限制聚合管道返回的文档数</li><li>$skip:跳过指定数量的文档。并返回余下的文档</li><li>$unwind:将数组类型的字段进行拆分</li></ul>
<p class="maodian"><a name="_lab2_2_16"></a></p><h3>3.2 表达式</h3>
<p>常用表达式:</p>
<ul><li>$sum:计算总和, $sum:1 表示以一倍计算</li><li>$avg:计算平均值</li><li>$min:获取最小值</li><li>$max:获取最大值</li><li>$push:在结果文档中插入值到一个数组中</li><li>$first:根据资源文档的排序获取第一个文档数据</li><li>$last:根据资源文档的排序获取最后一个文档数据</li></ul>
<p class="maodian"><a name="_lab2_2_17"></a></p><h3>3.3 $group</h3>
<p>将集合中的文档分组,可用于统计结果</p>
<p>_id表示分组的依据,使用某个字段的格式为&rsquo;$字段&rsquo;</p>
<p>统计地区总数</p>
<div class="jb51code"><pre class="brush:sql;">db.map.aggregate(
    {$group:{_id: '$country',counter: {$sum:1}}}
)
</pre></div>
<p>将集合中所有文档分为一组:求学生的总人数和平均年龄</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
    {$group:{_id: null , counter: {$sum:1},age_avg: {$avg: '$age'}}}
)
</pre></div>
<p class="maodian"><a name="_lab2_2_18"></a></p><h3>3.4 $project</h3>
<p>查询学生的姓名、年龄</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
   {$project:{_id:0,name:1,age:1}}
)
</pre></div>
<p>查询男生、女生人数,输出人数</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
   {$group:{_id:'$sex',counter:{$sum:1}}},
   {$project:{_id:0, sex:'$_id',counter:1}}
)
</pre></div>
<p class="maodian"><a name="_lab2_2_19"></a></p><h3>3.5 $match</h3>
<p>用于过去数据,只输出符合条件的文档</p>
<p>查询年龄大于20的学生</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
   {$match:{age:{$gt:20}}}
)
</pre></div>
<p>查询你哪里大于20的男生、女生总数</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
   {$match:{age:{$gt:20}}},
   {$group:{_id:'$sex', counter:{$sum:1}}}
)
</pre></div>
<p class="maodian"><a name="_lab2_2_20"></a></p><h3>3.6 $sort</h3>
<p>将输入文档排序后输出</p>
<p>查询学生信息,并按年龄升序</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
    {$sort:{age:1}}
)
</pre></div>
<p>按照性别分类并按人数降序</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
    {$group:{_id:'$sex',count:{$sum:1}}},
    {$sort:{count:-1}},
    {$project:{count:1,_id:0}})
</pre></div>
<p class="maodian"><a name="_lab2_2_21"></a></p><h3>3.7 $limit</h3>
<p>限制聚合管道返回的文档数</p>
<p>查询2条学生信息</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
   {$limit:2}
)
</pre></div>
<p class="maodian"><a name="_lab2_2_22"></a></p><h3>3.8 $skip</h3>
<p>跳过指定数量的文档,并返回余下的文档</p>
<p>查询从第2条开始的学生信息</p>
<div class="jb51code"><pre class="brush:sql;">db.stu.aggregate(
   {$skip:2}
)
</pre></div>
<p class="maodian"><a name="_lab2_2_23"></a></p><h3>3.9 $unwind</h3>
<p>将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值</p>
<p>语法:db.集合名称.aggregate({&nbsp;u n w i n d : &prime; unwind:&#39;&nbsp;unwind:&prime;字段名称&rsquo;})</p>
<div class="jb51code"><pre class="brush:sql;">db.t2.insert(
   {_id:1, item:'t-shirt', size:['S', 'M', 'L']}
)
db.t2.aggregate(
   {$unwind:'$size'}
)
注意:如果每条文档中含有该数组的字段值为空的时候,想保留字段内容,可以使用:
db.t2.aggregate(
   {$unwind:{
       path: '$字段名称',
       preserveNullAndEmptyArrays:&lt;boolean&gt;# 防止数据丢失
   }}
)</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>总结&nbsp;</h2>
頁: [1]
查看完整版本: mongodb命令行连接及基础命令总结大全