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>
可以看出,插入命令成功执行。
ICP备案:
公安联网备案: