MongoDB数据库基本操作大全(附带实例)
想要掌握数据库,首先需要熟悉如何使用其对数据进行操作。最基础的操作就是数据的创建、查询、修改和删除。
MongoDB 提供了多种语言支持,例如 C#、Go、Java、Motor、Node.js、Perl、PHP、Python、Ruby、Scala等,功能最强大、使用频率最高的方法还是基于 mongosh 操作数据库。mongosh 提供了诸多关于数据库、集合、文档等操作的方法,覆盖内容比较全面。
mongosh 提供了多个有关数据库的方法,下表列举了常用的几个方法。
通过这些方法能够获取到数据库的基本信息、统计信息和服务信息等,从整体上掌握数据库的运行状态,也能够进行一些数据操作,例如删除数据库、创建集合或视图等。
【实例】创建并切换 shopping 数据库。首先保证数据库中不存在名为 shopping 的数据库。执行如下命令,切换到该数据库:
此时,数据库 shopping 中不存在任何集合和文档,实际上该数据库是不存在的。此时查看数据库列表:
在该数据库中执行如下的插入文档命令,该命令会创建一个新的商品集合,名称为 products,向商品集合中插入一条数据。
然后执行 show dbs 查看数据库列表:
【实例】删除数据库。使用删除命令删除前面创建的 shopping 数据库。首先保证当前操作在 shopping 数据库下,如果不在 shopping 数据库下,则使用 use 命令进行数据库切换:
删除完成后,虽然当前命令依然在 shopping 数据库下,但此时执行 show dbs 查看数据库列表,可以看到数据库列表中已经不存在 shopping 数据库了。
【实例】创建并查询集合信息。创建前首先切换到 shopping 数据库下,执行创建集合的语句。创建完成后,使用 db.getCollectionInfos() 方法查看集合信息。语句如下:
【实例】规避同名方法。首先在数据库中创建 stats 集合,然后向集合中插入一条数据,命令如下:
此时,可以借助 db.getCollection 方法来避免这个问题。首先通过命令 .editor 打开编辑器,在编辑器中编写脚本,定义变量来接收集合名称,然后执行插入操作。命令如下:
MongoDB 提供了多种语言支持,例如 C#、Go、Java、Motor、Node.js、Perl、PHP、Python、Ruby、Scala等,功能最强大、使用频率最高的方法还是基于 mongosh 操作数据库。mongosh 提供了诸多关于数据库、集合、文档等操作的方法,覆盖内容比较全面。
mongosh 提供了多个有关数据库的方法,下表列举了常用的几个方法。
命令或方法名 | 描述 |
---|---|
show dbs、show databases | 查看当前用户所能看到的数据库列表 |
use <databaseName> | 创建、切换数据库 |
db.getName() | 获取当前数据库名称 |
db.dropDatabase() | 删除数据库 |
db.version() | 查看 MongoDB 版本 |
db.stats() | 查询数据库的信息,包含集合数量、存储容量等 |
db.getReplicationInfo() | 查询副本信息,用于集群 |
db.createCollection() | 创建集合 |
db.getCollection() | 获取集合名称,例如 shopping.products,可以用来规避同名方法 |
db.getCollectionInfos() | 获取集合信息列表 |
db.getCollectionNames() | 获取集合名列表 |
通过这些方法能够获取到数据库的基本信息、统计信息和服务信息等,从整体上掌握数据库的运行状态,也能够进行一些数据操作,例如删除数据库、创建集合或视图等。
MongoDB操作数据库
1) 查看数据库列表
可以使用如下命令列出当前用户所能看到的数据库列表:show dbs; show databases;
2) 创建、切换数据库
在使用任何数据库之前,都要切换到当前数据库下。切换数据库使用 use 命令,语法如下:use <databaseName>如果当前数据库不存在,命令行依然会切换到该数据库,但数据库实际上并不存在。此时,如果对该数据库执行创建集合或插入文档的操作,就能自动创建对应的数据库。
【实例】创建并切换 shopping 数据库。首先保证数据库中不存在名为 shopping 的数据库。执行如下命令,切换到该数据库:
use shopping命令执行成功后,会提示已切换到数据库 shopping:
test> use shopping switched to do shopping
此时,数据库 shopping 中不存在任何集合和文档,实际上该数据库是不存在的。此时查看数据库列表:
shopping> show dbs admin 40.00 KiB config 72.00 KiB local 72.00 KiB myNewDatabase 40.00 KiB reading 88.00 KiB sample_mflix 72.00 KiB test 144.00 KiB
在该数据库中执行如下的插入文档命令,该命令会创建一个新的商品集合,名称为 products,向商品集合中插入一条数据。
db.products.insertOne({name:"世界经典名著"})
然后执行 show dbs 查看数据库列表:
shopping> db.products.insertOne({name:"世界经典名著"}) { acknowledged: true, insertedId: ObjectId('659b58fe7b534694d36820e2') } shopping> show dbs admin 40.00 KiB config 108.00 KiB local 72.00 KiB myNewDatabase 40.00 KiB reading 88.00 KiB sample_mflix 72.00 KiB shopping 8.00 KiB test 144.00 KiB从运行结果可以看到,此时列表中出现了此前创建的 shopping 数据库。
3) 删除数据库
在 mongosh 中,可以使用 db.dropDatabase() 方法来删除数据库。【实例】删除数据库。使用删除命令删除前面创建的 shopping 数据库。首先保证当前操作在 shopping 数据库下,如果不在 shopping 数据库下,则使用 use 命令进行数据库切换:
test> use shopping switched to db shopping shopping> db.dropDatabase() { ok: 1, dropped: 'shopping' } shopping> show dbs admin 40.00 KiB config 108.00 KiB local 72.00 KiB myNewDatabase 40.00 KiB reading 88.00 KiB sample_mflix 72.00 KiB test 144.00 KiB可以看出,成功删除数据库后,会返回删除结果,ok 的值为 1,dropped 的值为当前删除的数据库的名称。
删除完成后,虽然当前命令依然在 shopping 数据库下,但此时执行 show dbs 查看数据库列表,可以看到数据库列表中已经不存在 shopping 数据库了。
4) 创建集合
除直接使用 insert 命令向不存在的集合中插入文档来创建集合外,也可以通过 db.createCollection() 方法在当前数据库下直接创建集合,语法如下:db.createCollection(name, options)该方法接收两个参数,第一个参数 name 为集合名称;第二个配置项 options 为可选项,用来配置集合信息,格式如下:
db.createCollection( <name>, { capped: <boolean>, timeseries: { // 支持 MongoDB 5.0 及以上版本 timeField: <string>, // 如果设置 timeseries 字段,那么该字段必填 metaField: <string>, granularity: <string> }, expireAfterSeconds: <number>, clusteredIndex: <document>, // 支持 MongoDB 5.3 及以上版本 changeStreamPreAndPostImages: <document>, // 支持 MongoDB 6.0 及以上版本 size: <number>, max: <number>, storageEngine: <document>, validator: <document>, validationLevel: <string>, validationAction: <string>, indexOptionDefaults: <document>, viewOn: <string>, pipeline: <pipeline>, collation: <document>, writeConcern: <document> } )
【实例】创建并查询集合信息。创建前首先切换到 shopping 数据库下,执行创建集合的语句。创建完成后,使用 db.getCollectionInfos() 方法查看集合信息。语句如下:
db.createCollection("products"); show dbs;执行结果为:
shopping> db.createCollection("products") { ok: 1 } shopping> show dbs admin 40.00 KiB config 108.00 KiB local 72.00 KiB myNewDatabase 40.00 KiB reading 88.00 KiB sample_mflix 72.00 KiB shopping 8.00 KiB test 144.00 KiB shopping> db.getCollectionInfos() [ { name: 'products', type: 'collection', options: {}, info: { readonly: false, uuid: UUID('067579fe-0849-4850-8912-9ce0ea1dbbd2') }, idIndex: { v: 2, key: { _id: 1 }, name: '_id' } } ]
5) 获取集合名称
在 mongosh 中存在很多方法,这些方法以 db. 开头,这与操作集合时拥有相同的开头,例如表 1 中提到的 db.stats() 方法。此时,如果在数据库中创建 stats 集合,然后使用 db.stats 开头的插入方法来操作集合数据,会返回一些错误。【实例】规避同名方法。首先在数据库中创建 stats 集合,然后向集合中插入一条数据,命令如下:
db.createCollection("stats"); db.stats.insertOne({total:1000})执行结果为:
shopping> db.createCollection("stats"); { ok: 1 } shopping> db.stats.insertOne({total:1000}) TypeError: db.stats.insertOne is not a function从运行结果可以看到,命令执行失败,返回了 db.stats() 没有 insertOne 方法的提示信息。
此时,可以借助 db.getCollection 方法来避免这个问题。首先通过命令 .editor 打开编辑器,在编辑器中编写脚本,定义变量来接收集合名称,然后执行插入操作。命令如下:
var statsColl = db.getCollection("stats"); statsColl .insertOne({total:1000})执行结果为:
shopping> .editor // Entering editor mode (Ctrl+D to finish, Ctrl+C to cancel) var statsColl = db.getCollection("stats"); statsColl .insertOne({total:1000}) { acknowledged: true, insertedId: ObjectId('659bc0ee7b534694d36820e3') } shopping>可以看出,插入命令成功执行。