首页 > 编程笔记 > MongoDB 阅读:36

MongoDB数据库基本操作大全(附带实例)

想要掌握数据库,首先需要熟悉如何使用其对数据进行操作。最基础的操作就是数据的创建、查询、修改和删除。

MongoDB 提供了多种语言支持,例如 C#、Go、Java、Motor、Node.js、Perl、PHP、Python、Ruby、Scala等,功能最强大、使用频率最高的方法还是基于 mongosh 操作数据库。mongosh 提供了诸多关于数据库、集合、文档等操作的方法,覆盖内容比较全面。

mongosh 提供了多个有关数据库的方法,下表列举了常用的几个方法。

表 1 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>
可以看出,插入命令成功执行。

相关文章