MongoDB 进阶(命令\固定集合)

本文介绍了MongoDB中的常用命令,包括管理、查询、更新等操作,并详细解释了固定集合的特点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令参考

 

查看MongoDB命令方法

shell中运行db.listCommands()命令

在浏览器管理接口http://localhost:28017/_commands

 

下面是MongoDB最常使用的命令:

 buildinfo

管理专用命令,返回MongoDB服务器的版本号和主机操作系统信息

>db.runCommand({"buildinfo":1})

{

        "version" :"2.4.14",

        "gitVersion" :"05bebf9ab15511a71bfbded684bb226014c0a553",

        "sysInfo" : "Linuxip-10-154-253-119 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST2009 x86_64 BOOST_LIB_VERSION=1_49",

        "loaderFlags" : "-fPIC-pthread -rdynamic",

        "compilerFlags" :"-Wnon-virtual-dtor -Woverloaded-virtual -fPIC -fno-strict-aliasing -ggdb-pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch -pipe -Werror-fno-builtin-memcmp -O3",

        "allocator" :"tcmalloc",

        "versionArray" : [

                2,

                4,

                14,

                0

        ],

        "javascriptEngine" :"V8",

        "bits" : 64,

        "debug" : false,

        "maxBsonObjectSize" :16777216,

        "ok" : 1

}

 

 

 collStats

{"collStats" : collection}

返回指定统计集合的统计信息,包括大小、分配空间和索引大小

 

 distinct

{"distinct" : collection,"key": key, "query": query}

列出指定集合中满足查询条件的文档的指定键的所有不同的值

 

 drop

{"drop" : collection}

删除集合的所有数据(即删除集合)

 

dropDatabase

{"dropDatabase":1}

删除当前数据库的所有数据(即删除数据库)

 

dropIndexes

删除集合里面名称为name的索引,如果名称为"*"即为删除所有索引

{"dropIndexes" : collection,"index" : name}

 

 

findAndModify

拥有类似事务特性的更新与查询操作

它是原子性的,会返回符合查询条件的更新后的文档。

一次最多只更新一个文档,也就是条件query条件,且执行sort后的第一个文档。

db.COLLECTION_NAME.findAndModify({query:{},

                                  update:{},

                                 remove:true|false,

                                 new:true|false,

                                  sort:{},

                                  fields:{},

                                 upsert:true|false});

query是查询选择器,与findOne的查询选择器相同

update是要更新的值,不能与remove同时出现

remove表示删除符合query条件的文档,不能与update同时出现

newtrue:返回个性后的文档,false:返回个性前的,默认是false

sort:排序条件,与sort函数的参数一致。

fields:投影操作,与find*的第二个参数一致。

upsert:updateupsert参数一样。

 

getLastError

{"getLastError" : 1[,"w" : w[, "wtimeout" : timeout]]}

查看本集合执行的最后一次操作的错误信息或者其它状态信息。在w台服务器复制集合的最后操作之前,这个命令会阻塞(超时的毫秒数到了)

 

isMaster

{"isMaster" : 1}

查看本服务器是主服务器还是从服务器

 

listCommands

{"listCommands":1}

返回所有可以在服务器上运行的命令及相关信息

 

listDatabases

{"listDatabases":1}

管理数据库命令,列出服务器上所有数据库(需要在admin库上运行),同show dbs命令

 

> show dbs

admin   (empty)

local   0.078125GB

test    0.203125GB

> use admin

switched to db admin

>db.runCommand({"listDatabases":1})

{

        "databases" : [

                {

                        "name" :"local",

                        "sizeOnDisk": 83886080,

                        "empty" :false

                },

                {

                        "name" :"test",

                        "sizeOnDisk": 218103808,

                        "empty" :false

                },

                {

                        "name" :"admin",

                        "sizeOnDisk": 1,

                        "empty" :true

                }

        ],

        "totalSize" : 301989888,

        "ok" : 1

}

 

ping

检查服务器连接是否正常。即服务器上锁了,这条命令也会立刻返回。

 

renameCollection

{"renameCollection" : a,"to" : b}

将集合a重命名为b,其中ab都必需是完整的命令空间(例如"foo.bar"表示foo数据库中的bar集合)

 

repairDatabase

修复并压缩当前数据库,这个操作可能会非常耗时。

 

serverStatus

{"serverStatus":1}

返回这台服务器的管理统计信息。

 

 

固定集合

 

和普通集合相比,固定集合是大小是固定的,要事先创建。固定集合很像环形队列,如果空间不足,最早文档就会被删除,为新的文档腾出空间。这意味着固定集合在新文档插入时候会自动淘汰最早的文档。

还一个和普通集合的区别:就是在默认情况下固定集合没有索引,即使是"_id"上也没有索引。

 

固定集合特点:

1.插入速度极快,无需分配额外空间和查找空闲列表来放置文档。

2.按插入顺序输出的查询速度极快,因为文档本身是按插入顺序存储的。

3.插入新数据时,自动淘汰最的数据。

 

 

图:插入新文档到队尾

 

 

图:当队尾满了,将最后的文档替换掉

 

所以特别适合存储日志这种场景。MongoDB中设计固定集合的目的就是用来存储内部的复制日志oplog.

 

 

--创建固定集合,必需显示的创建

>db.createCollection("capped_col",{capped:true,size:100000});

{ "ok" : 1 }

 

说明:

capped_col:为固定集合名称

固定集合大小为100 000字节

其它选项 max是指定文档的上限,如:

 

>db.createCollection("capped_col1",{capped:true,size:100000,max:100});

{ "ok" : 1 }

 

注意:指定文档上限时必需同时指定大小,淘汰机制只有在容量没有满时才会依据文档数据来工作。要是容量满了,淘汰机制则会依据容量来工作,就像别的固定集合一样。

 

--把普通集合转换成固定集合(大小为10000字节)

>db.runCommand({convertToCapped:"users",size:100000})

{ "ok" : 1 }

 

 

固定集合-自然排序

和前面介绍一样,自然排序就是文档在磁盘上的顺序,查询固定集合MongoDB默认是按插入顺序返回文档($natural:1)。也可以使用自然排序按照反向插入的顺序查询。

>db.capped_col.find().sort({"natural":-1})

 

如图示例

图:按$natural:1排序(默认)

 

 

图:按$natural:-1排序

 


<think>好的,用户现在需要我介绍一下MongoDB命令大全。之前他问过关于replace操作,现在可能是在学习MongoDB的基础,需要更全面的命令总结。我需要先理清MongoDB的主要命令类别,比如数据库操作、集合操作、文档CRUD、索引、聚合、用户权限等。 用户可能是刚入门的开发者或者学生,想要一个系统的命令参考,方便日常使用。他可能不太清楚MongoDB命令的具体分类,或者需要快速查找某个命令的语法和例子。所以我的回答需要结构清晰,分门别类,每个部分给出常用命令和示例,同时注意中文解释的准确性。 之前回复过replaceOne,现在需要扩展成全面的命令大全。需要注意的是,MongoDB命令很多,不可能全部覆盖,但需要包括最常用的部分,避免信息过载。同时,用户可能希望了解基本操作和进阶功能,比如聚合管道和索引优化。 要确保每个命令的语法正确,例子简单明了,比如插入文档用insertOne,查询用find,更新用updateOne等。还要提醒用户注意不同版本的可能差异,比如MongoDB的某些命令在新版本中可能有变化,或者过时的方法如save()已经不推荐使用。 另外,用户可能对权限管理和聚合操作不太熟悉,这部分需要详细说明,比如创建用户、角色,以及聚合管道的使用场景。索引部分要解释不同类型的索引及其适用情况,帮助用户优化查询性能。 最后,需要总结使用建议,比如先掌握基础CRUD,再学习聚合和索引,提醒用户参考官方文档获取最新信息。整体结构要层次分明,方便用户快速浏览和查找所需命令,同时保持语言简洁,避免冗长。</think>以下为 **MongoDB 常用命令分类总结**,涵盖数据库、集合、文档操作及高级功能: --- ### **一、数据库操作** 1. **查看所有数据库** ```bash show dbs ``` 2. **切换/创建数据库** ```bash use 数据库名 # 若数据库不存在则自动创建 ``` 3. **删除当前数据库** ```bash db.dropDatabase() ``` --- ### **二、集合操作** 1. **查看所有集合** ```bash show collections ``` 2. **创建集合** ```bash db.createCollection("集合名", { 可选参数 }) # 示例:设置固定大小 db.createCollection("logs", { capped: true, size: 100000 }) ``` 3. **删除集合** ```bash db.集合.drop() ``` --- ### **三、文档 CRUD 操作** #### **1. 插入文档** ```bash db.集合.insertOne({ 文档 }) # 插入单个文档 db.集合.insertMany([{文档1}, {文档2}]) # 批量插入 ``` #### **2. 查询文档** ```bash db.集合.find({ 查询条件 }, { 投影字段 }) # 基础查询 db.集合.findOne({ 条件 }) # 返回第一条匹配结果 ``` - **条件示例** ```bash # 查询年龄大于25的用户,仅返回name字段 db.users.find({ age: { $gt: 25 } }, { name: 1 }) ``` #### **3. 更新文档** ```bash db.集合.updateOne({ 条件 }, { $set: {字段: 值} }) # 更新第一个匹配项 db.集合.updateMany({ 条件 }, { $set: {字段: 值} }) # 批量更新 ``` - **操作符** `$set`(修改字段)、`$unset`(删除字段)、`$inc`(数值增加)等 #### **4. 删除文档** ```bash db.集合.deleteOne({ 条件 }) # 删除第一条匹配文档 db.集合.deleteMany({ 条件 }) # 删除所有匹配文档 ``` --- ### **四、索引管理** 1. **创建索引** ```bash db.集合.createIndex({ 字段: 排序方向 }, { 选项 }) # 示例:为email字段创建唯一索引 db.users.createIndex({ email: 1 }, { unique: true }) ``` 2. **查看索引** ```bash db.集合.getIndexes() ``` 3. **删除索引** ```bash db.集合.dropIndex("索引名称") ``` --- ### **五、聚合查询** 1. **基础聚合管道** ```bash db.集合.aggregate([ { $match: { 条件 } }, # 过滤文档 { $group: { _id: "$字段", 统计字段: { $sum: 1 } } }, # 分组统计 { $sort: { 字段: 1 } } # 排序(1升序,-1降序) ]) ``` 2. **常用聚合操作符** `$sum`, `$avg`, `$max`, `$min`, `$push`, `$project`(字段投影) --- ### **六、用户与权限管理** 1. **创建用户** ```bash use admin db.createUser({ user: "用户名", pwd: "密码", roles: [ { role: "角色", db: "数据库名" } ] }) ``` 2. **常用角色** `read`(只读)、`readWrite`(读写)、`dbAdmin`(数据库管理)、`root`(超级用户) 3. **验证用户** ```bash db.auth("用户名", "密码") ``` --- ### **七、实用工具命令** 1. **统计文档数量** ```bash db.集合.countDocuments({ 条件 }) ``` 2. **清空集合(保留结构)** ```bash db.集合.deleteMany({}) # 删除所有文档 ``` 3. **导出/导入数据** ```bash mongodump --db 数据库名 # 导出数据库 mongorestore --db 数据库名 # 导入数据库 ``` --- ### **八、高级功能** 1. **地理空间查询** ```bash db.places.createIndex({ location: "2dsphere" }) # 创建地理索引 db.places.find({ location: { $near: { $geometry: { type: "Point", coordinates: [经度, 纬度] }, $maxDistance: 1000 # 最大距离(米) } } }) ``` 2. **事务支持** ```bash session.startTransaction() try { db.集合.updateOne(...); db.另一集合.deleteOne(...); session.commitTransaction(); } catch (error) { session.abortTransaction(); } ``` --- ### **使用建议** 1. **优先使用现代语法** - 弃用旧命令如 `save()`, `count()`,改用 `insertOne()`, `countDocuments()` 等 2. **性能优化** - 高频查询字段必须创建索引 - 避免全集合扫描(如无条件的 `find()`) 3. **安全规范** - 生产环境务必启用身份验证(`--auth` 启动参数) - 限制用户权限至最小必要范围 --- 如需更详细的命令说明,请参考 [MongoDB 官方文档](https://www.mongodb.com/docs/)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值