命令参考 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 | { |
_id 是一个12字节的十六进制数字,确保每个文档的唯一性。您可以在插入文档时提供 _id。如果您不提供,则 MongoDB 为每个文档提供一个唯一的 id。这12个字节的前4个字节用于当前时间戳,接下来3个字节用于机器 id,接下来2个字节用于 MongoDB 服务器的进程 id,剩下的3个字节是简单的递增值。
进入命令行
老版本是mongo,新版本是mongosh。
数据库
MongoDB use DATABASE_NAME 用于创建数据库。如果数据库不存在,则命令将创建一个新的数据库,否则它将返回现有的数据库。
1 | use DATABASE_NAME |
如果想检查数据库列表,请使用以下命令
1 | show dbs |
MongoDB的 db.dropDatabase() 命令用于删除一个已存在的数据库。这将会删除选中的数据库。如果你没有选中任何数据库,那么它将会删除默认的 ‘test’ 数据库。
1 | db.dropDatabase() |
集合
集合不创建,可以直接插入文档数据,会自动创建集合。也可以手动创建。
创建集合。
1 | db.createCollection(name, options) |
其中:
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
创建一个名为kitty的集合
1 | db.createCollection('kitty') |
查看有哪些集合,2条语句效果一样
1 | show tables |
删除集合。(删除一个名字叫mycol的集合)
1 | db.mycol.drop() |
文档
文档的数据结构和 JSON 基本一样。
所有存储在集合中的数据都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
插入文档
db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:
1 | db.collection.insertOne( |
db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:
1 | db.collection.insertMany( |
例如:
1 | db.kitty.insertOne({title: 'MongoDB 教程', |
创建文档变量然后插入:
1 | document=({title: 'MongoDB 教程', |
更新文档
要更新单个文档,请使用db.collection.updateOne() 。
要更新多个文档,请使用db.collection.updateMany() 。
要替换文档,请使用db.collection.replaceOne() 。
要更新 sample_airbnb.listingsAndReviews 集合中 security_deposit 小于 100 的所有待更新文档:更新操作使用$set操作符将security_deposit字段的值更新为100 ,并将minimum_nights字段的值更新为1 。
1 | use sample_airbnb |
要替换 第一个 集合中的sample_analytics.accounts文档,其中account_id: 371138:
1 | db.accounts.replaceOne( |
删除文档
要删除多个文档,请使用db.collection.deleteMany() 。
要删除单个文档,请使用db.collection.deleteOne() 。
要删除 sample_mflix.movies 集合中的所有文档:
1 | use sample_mflix |
要删除 sample_mflix.movies 集合中的所有文档,其中 title 等于 “Titanic”:
1 | use sample_mflix |
查询文档
查看集合kitty内所有文档
1 | db.kitty.find().pretty() |
主键查询,kitty集合内主键662f5f6d5ffbe3ea512202da的数据
1 | db.kitty.find({ _id: ObjectId('662f5f6d5ffbe3ea512202da') }).pretty() |
要返回 movies 集合中 title 等于Titanic 的所有电影:
1 | use sample_mflix |
要返回 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 | db.movies.find( { |