喵星之旅-狂奔的兔子-MongoDB基本操作

命令参考 https://www.mongodb.com/zh-cn/docs/manual/introduction/

简介

MongoDB 概述

MongoDB是一个跨平台、面向文档的数据库,提供高性能、高可用性和易扩展性。 MongoDB基于集合和文档的概念进行操作。

数据库是集合的物理容器。每个数据库在文件系统上有自己的文件集。一个MongoDB服务器通常有多个数据库。

集合是一组MongoDB文档的集合,相当于RDBMS的表。集合存在于一个单独的数据库中。集合不强制执行模式。集合中的文档可以具有不同的字段。通常,集合中的所有文档具有相似或相关的目的。

文档是一组键值对。文档具有动态模式。动态模式意味着同一个集合中的文档不需要具有相同的字段或结构,并且集合的文档中的共同字段可能包含不同类型的数据。

以下显示了RDBMS术语与MongoDB之间的关系。
关系型数据库管理系统(RDBMS) MongoDB
数据库(Database) 数据库(Database)
表(Table) 集合(Collection)
元组/行(Tuple/Row) 文档(Document)
列(Column) 字段(Field)
表连接(Table Join) 嵌入式文档(Embedded Documents)
主键(Primary Key) 主键(默认键_id由MongoDB自身提供)

以下示例展示了博客站点的文档结构,它只是一个逗号分隔的键值对。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
_id: ObjectId(7df1237ujs2c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'tutorials point',
url: 'http://www.kittybunny.cn',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2011,1,20,2,15),
like: 0
},
{
user:'user2',
message: 'My second comments',
dateCreated: new Date(2011,1,25,7,45),
like: 5
}
]
}

_id 是一个12字节的十六进制数字,确保每个文档的唯一性。您可以在插入文档时提供 _id。如果您不提供,则 MongoDB 为每个文档提供一个唯一的 id。这12个字节的前4个字节用于当前时间戳,接下来3个字节用于机器 id,接下来2个字节用于 MongoDB 服务器的进程 id,剩下的3个字节是简单的递增值。

进入命令行

老版本是mongo,新版本是mongosh。

数据库

MongoDB use DATABASE_NAME 用于创建数据库。如果数据库不存在,则命令将创建一个新的数据库,否则它将返回现有的数据库。

1
2
use DATABASE_NAME

如果想检查数据库列表,请使用以下命令

1
show dbs

MongoDB的 db.dropDatabase() 命令用于删除一个已存在的数据库。这将会删除选中的数据库。如果你没有选中任何数据库,那么它将会删除默认的 ‘test’ 数据库。

1
2
db.dropDatabase()

集合

集合不创建,可以直接插入文档数据,会自动创建集合。也可以手动创建。

创建集合。

1
db.createCollection(name, options)

其中:
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项

创建一个名为kitty的集合

1
db.createCollection('kitty')

查看有哪些集合,2条语句效果一样

1
2
show tables
show collections

删除集合。(删除一个名字叫mycol的集合)

1
db.mycol.drop()

文档

文档的数据结构和 JSON 基本一样。

所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

插入文档

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:

1
2
3
4
5
6
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

1
2
3
4
5
6
7
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)

例如:

1
2
3
4
db.kitty.insertOne({title: 'MongoDB 教程', 
description: 'MongoDB 是一个数据库',
tags: ['mongodb', 'NoSQL']
})

创建文档变量然后插入:

1
2
3
4
5
6
document=({title: 'MongoDB 教程', 
description: 'MongoDB 是一个数据库',
tags: ['mongodb', 'NoSQL']
});
db.kitty.insertOne(document)

更新文档

要更新单个文档,请使用db.collection.updateOne() 。

要更新多个文档,请使用db.collection.updateMany() 。

要替换文档,请使用db.collection.replaceOne() 。

要更新 sample_airbnb.listingsAndReviews 集合中 security_deposit 小于 100 的所有待更新文档:更新操作使用$set操作符将security_deposit字段的值更新为100 ,并将minimum_nights字段的值更新为1 。

1
2
3
4
5
6
7
use sample_airbnb
db.listingsAndReviews.updateMany(
{ security_deposit: { $lt: 100 } },
{
$set: { security_deposit: 100, minimum_nights: 1 }
}
)

要替换 第一个 集合中的sample_analytics.accounts文档,其中account_id: 371138:

1
2
3
4
db.accounts.replaceOne(
{ account_id: 371138 },
{ account_id: 893421, limit: 5000, products: [ "Investment", "Brokerage" ] }
)

删除文档

要删除多个文档,请使用db.collection.deleteMany() 。

要删除单个文档,请使用db.collection.deleteOne() 。

要删除 sample_mflix.movies 集合中的所有文档:

1
2
use sample_mflix
db.movies.deleteMany({})

要删除 sample_mflix.movies 集合中的所有文档,其中 title 等于 “Titanic”:

1
2
use sample_mflix
db.movies.deleteMany( { title: "Titanic" } )

查询文档

查看集合kitty内所有文档

1
db.kitty.find().pretty()

主键查询,kitty集合内主键662f5f6d5ffbe3ea512202da的数据

1
2
db.kitty.find({ _id: ObjectId('662f5f6d5ffbe3ea512202da') }).pretty()

要返回 movies 集合中 title 等于Titanic 的所有电影:

1
2
use sample_mflix
db.movies.find( { "title": "Titanic" } )

要返回 movies 集合中分级为 PG 或 PG-13 的所有电影:

1
db.movies.find( { rated: { $in: [ "PG", "PG-13" ] } } )

要返回在墨西哥上映且 IMDB 评级至少为 7 的电影:

1
db.movies.find( { countries: "Mexico", "imdb.rating": { $gte: 7 } } )

要返回 2010 年发行的 sample_mflix.movies 系列中至少获得 5 个奖项或 genre 为 Drama 的电影:

1
2
3
4
db.movies.find( {
year: 2010,
$or: [ { "awards.wins": { $gte: 5 } }, { genres: "Drama" } ]
} )
文章目录
  1. 简介
  2. 进入命令行
  3. 数据库
  4. 集合
  5. 文档
    1. 插入文档
    2. 更新文档
    3. 删除文档
    4. 查询文档
|