MongoDBshell

127 阅读3分钟

BSON类型

BSON 是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用。

类型数值别名注意
双精度1"double"
字符串2"string"
对象3"object"
阵列4"array"
二进制数据5"binData"
未定义6"undefined"已弃用。
ObjectId7"objectId"
布尔8"bool"
Date9"date"
null10"null"
正则表达式11"regex"
数据库指针12"dbPointer"已弃用。
JavaScript13"javascript"
符号14"symbol"已弃用。
32 位整数16"int"
时间戳17"timestamp"
64 位整型18"long"
Decimal12819"decimal"
最小键-1"minKey"
Max key127"maxKey"

创建数据库

使用 use 命令来指定一个数据库时,如果该数据库不存在,MongoDB将自动创建它

查看数据库列表
show dbs
查看当前数据库
db
删除数据库
db.dropDatabase() //将删除当前正在使用的 myDatabase 数据库及其所有集合

集合

创建数据库后,通常需要在其中创建集合(collections)

MongoDB 中默认的数据库为test

集合创建方法
db.createCollection('集合名字')   
查看已有集合
show collections //或 show tables
重命名集合
db.adminCommand({
  renameCollection: "sourceDb.sourceCollection",
  to: "targetDb.targetCollection",
  dropTarget: <boolean> // 可选,如果目标集合已经存在,是否删除目标集合。默认值为 `false`。
})
删除集合
db.collection(集合名字).drop()

文档

文档(documents)

  • db.collection.insertOne():插入单个文档
  • db.collection.insertMany():插入多个文档
  • db.collection.save():类似于 insertOne()。如果文档存在,则该文档会被更新;如果文档不存在,则会插入一个新文档。
db.collection.insertOne(document, options)
db.collection.insertMany(documents, options)
db.collection.save(document, options)

options:

  • ordered(仅适用于 insertMany):布尔值。如果为 true,则按顺序插入文档,在遇到错误时停止;如果为 false,则尝试插入所有文档,即使遇到错误也继续。默认值为 true。
  • writeConcern:指定写操作的确认级别。
  • bypassDocumentValidation:布尔值。如果为 true,则忽略集合的文档验证规则。
查看已插入文档:
db.collection.find()

更新文档

在 MongoDB 中,更新文档的操作可以使用多种方法实现,常用的方法包括 updateOne()、updateMany()、replaceOne() 和 findOneAndUpdate()

db.collection.updateOne(filter, update, options)
  • filter:用于查找文档的查询条件。
  • update:指定更新操作的文档或更新操作符。
  • options:可选参数对象,如 upsertarrayFilters 等
字段更新操作符:
名称说明
$currentDate将字段的值设置为当前日期,可以是日期或时间戳。
$inc将字段的值按指定量递增。
$min仅当指定值小于现有字段值时才更新字段。
$max仅当指定值大于现有字段值时才更新字段。
$mul将字段的值乘以指定量。
$rename重命名字段。
$set设置文档中字段的值。
$setOnInsert如果某一更新操作导致插入文档,则设置字段的值。对修改现有文档的更新操作没有影响。
$unset从文档中删除指定的字段。

options 参数通常可以包含以下选项:

  • upsert:如果没有匹配的文档,是否插入一个新文档。
  • arrayFilters:当更新嵌套数组时,指定应更新的数组元素的条件。
  • collation:指定比较字符串时使用的排序规则。
  • returnDocument:在 findOneAndUpdate 中使用,指定返回更新前 ("before") 或更新后 ("after") 的文档。

删除文档

db.collection.deleteOne()即使多个文档可能与指定筛选器匹配,最多也只删除与指定筛选器匹配的单个文档。
db.collection.deleteMany()删除所有与指定筛选器匹配的文档。
db.collection.remove()删除与指定过滤器匹配的单个文档或所有文档。

查询文档

MongoDB 查询文档使用 find()、findOne() 方法。

db.collection.find(query, projection) //query支持比较运算符,逻辑运算符,正则等
db.myCollection.find().sort({ age: -1 }); // -1降序,1升序

创建索引

db.collection.createIndex( keys, options )
  • db:数据库的引用。
  • collection:集合的名称。
  • keys:一个对象,指定了字段名和索引的排序方向(1 表示升序,-1 表示降序)。
  • options:一个可选参数,可以包含索引的额外选项。

options 参数是一个对象,可以包含多种配置选项,以下是一些常用的选项:

  • unique:如果设置为 true,则创建唯一索引,确保索引字段的值在集合中是唯一的。
  • background:如果设置为 true,则索引创建过程在后台运行,不影响其他数据库操作。
  • name:指定索引的名称,如果不指定,MongoDB 会根据索引的字段自动生成一个名称。
  • sparse:如果设置为 true,创建稀疏索引,只索引那些包含索引字段的文档。
  • expireAfterSeconds:设置索引字段的过期时间,MongoDB 将自动删除过期的文档。
  • v:索引版本,通常不需要手动设置。
  • weights:为文本索引指定权重。

聚合

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

下表展示了一些聚合的表达式:

表达式描述实例
$sum计算总和。db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {sum:"sum : "likes"}}}])
$avg计算平均值db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {avg:"avg : "likes"}}}])
$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {min:"min : "likes"}}}])
$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {max:"max : "likes"}}}])
$push将值加入一个数组中,不会判断是否有重复的值。db.mycol.aggregate([{group : {_id : "by_user", url : {push:"push: "url"}}}])
$addToSet将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。db.mycol.aggregate([{group : {_id : "by_user", url : {addToSet:"addToSet : "url"}}}])
$first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{group : {_id : "by_user", first_url : {first:"first : "url"}}}])
$last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{group : {_id : "by_user", last_url : {last:"last : "url"}}}])

管道的概念

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

这里我们介绍一下聚合框架中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • match:用于过滤数据,只输出符合条件的文档。match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。