mongodb shell
本文是我们学院课程中名为MongoDB –可伸缩NoSQL DB的一部分 。
在本课程中,您将被介绍到MongoDB。 您将学习如何安装它以及如何通过它的外壳进行操作。 此外,您还将学习如何通过Java以编程方式访问它以及如何将Map Reduce与其一起使用。 最后,将解释更高级的概念,例如分片和复制。 在这里查看 !
1.简介
MongoDB Shell是发现MongoDB功能并管理服务器部署,实例,数据库,集合和文档的每个方面的最佳工具。 它基于JavaScript语言,用于执行命令和查询。 如果您对JavaScript的了解很少或不了解,请不要担心:由于可以遵循一种常见的模式,因此您几乎可以轻松地理解每个示例。
JSON是一种用于管理文档的格式,它还用于指定命令和查询以及返回其结果。 这样的统一带来了很多好处,因为JSON本质上是简单的,对人类友好的并且易于理解。
在本部分的教程中,我们打算使用MongoDB的外壳程序通过MongoDB支持的大多数命令和查询,但与分片有关的命令和查询(将在第4部分中详细介绍)和复制(将涉及到复制)有关详细信息,请参阅第5部分 。 更高级的主题将在第7部分中介绍。MongoDB安全性,性能分析,索引编制,游标和批量操作指南 。
每个部分都专门针对MongoDB的特定方面:我们从Shell Command Helpers开始 ,然后查看Databases , Collections和Documents ,移至Queries and Aggregations ,最后完成Server特定的命令。
MongoDB有许多内部命令和实验命令,在大多数情况下,我们将不介绍这些命令。 它们的用法仅限于您可能从未遇到过的非常特定的场景(否则它们的行为可能会不稳定)。
下一小节假定您的MongoDB服务器实例已在本地计算机上启动并运行,如第1部分中所述。MongoDB安装-如何安装MongoDB 。
2. Shell命令助手
MongoDB Shell提供了几个命令帮助程序,它们可以建立上下文并隐式填充Shell变量,包括:
- db:当前数据库上下文变量
- rs:副本集上下文变量
- sh:分片上下文变量
在不提供命令行参数的情况下,默认情况下, MongoDB shell在端口27017和名称测试数据库(磁盘上可能实际不存在)上连接到本地MongoDB服务器实例和端口27017 。
命令 | 显示日志[名称] |
描述 | 输出日志存储器的最后一段。 如果省略记录器名称,则默认使用全局记录器。 |
例 | 在MongoDB Shell中,让我们发出命令: show log global |
显示日志[名称]
命令 | 加载(<文件名>) |
描述 | 在当前的MongoDB Shell环境中加载并执行一个名为filenameJavaScript文件。 |
例 | 让我们准备一个示例db.js脚本,该脚本位于MongoDB安装文件夹中,该脚本仅列出所有可用数据库并在控制台上输出其名称: result = db.getSiblingDB( 'admin' )
.runCommand( { listDatabases: 1 } );
for( index in result.databases ) {
print( result.databases[ index ].name );
}
在MongoDB Shell中,让我们发出命令: load('db.js') |
参考 | http://docs.mongodb.org/manual/reference/method/load/ |
加载(<文件名>)
使用MongoDB Shell,至少有两种方法可以运行命令:
- 使用通用的db.runCommand()函数调用
- 使用更方便的db。<command>或db。<collection>。<command>包装函数调用
在大多数情况下,第二个选项更具可读性,这将成为以下各节中示例的选择。 在大多数情况下,两个选项将并排展示(如果适用),因此您将能够选择自己喜欢的方式来运行命令。 请注意,并非所有命令都具有MongoDB Shell包装器,因此,它们只能与db.runCommand()函数调用一起运行。
3.数据库
数据库是MongoDB中的顶级数据容器,其中包含一个或多个文档集合。 MongoDB为每个数据库在磁盘上创建一个或多个物理文件,积极地预先分配数据文件以保留空间并避免文件系统碎片。
数据文件名遵循以下模式:第一个数据文件的名称为<数据库名称> .0,下一个数据文件的名称为<数据库名称> .1 ,依此类推。 第一预分配的文件的大小是64兆字节 ,第二个具有尺寸128兆字节 ,下一个256兆字节,等等,高达2千兆字节的最大尺寸(此时所有后续文件将是在大小为2千兆字节 ) 。 请记住,在将数据插入数据库之前, MongoDB不会永久创建数据库。
默认情况下, MongoDB还会创建日志文件,该日志文件在将写入操作应用于数据库之前将其存储在磁盘上。
每个MongoDB服务器实例都有自己的本地数据库,该数据库存储复制过程中使用的数据以及其他特定于实例的数据。 复制不会影响本地数据库:永远不会复制本地数据库中的集合( 第5部分。MongoDB复制指南讨论了有关复制的更多信息)。 此外,还有一个管理数据库–用户必须有权访问才能运行某些管理命令的特权数据库。
要在管理数据库的上下文中运行命令,可以使用以下选项:
-
use admin
db.runCommand( <command> )
请注意,当前数据库将切换为admin 。
-
db.getSiblingDB( 'admin' ) .runCommand( <command> )
链式调用更为冗长,但是当前数据库将不会切换并且保持不变。
-
db.adminCommand( <command> )
db.getSiblingDB('admin').runCommand(<command>)的快捷方式。
4.馆藏
集合是共享一个或多个索引的MongoDB文档的容器。 对于熟悉RDBMS概念的用户,集合相当于表。 集合属于单个数据库,并且不对包含文档执行任何架构。 对任何单个集合都可以包含的文档数量没有限制,除非它是一种特殊的集合,称为封顶集合:固定大小的集合,当其达到最大大小时会自动覆盖其最早的条目。
集合与数据库名称一起形成一个命名空间:使用句点'将数据库名称与集合名称连接在一起。 '字符,例如:
- test.collection1
- test.collection1.subcollection1
除用户定义的集合外, MongoDB将系统信息存储在使用<database> .system。*名称空间并保留供内部使用的集合中。 管理员数据库(请参阅数据库部分)包括以下系统集合:
- admin.system.roles
- admin.system.users
- admin.system.version
每个用户数据库都定义了以下系统集合:
- <数据库> .system.namespaces
- <数据库> .system.indexes
- <数据库> .system.profile
- <数据库> .system.js
在本节中,我们不会直接探索系统集合,但是如果您有兴趣获取更多详细信息,请参考官方文档 。
命令 | db。<集合> .help() |
描述 | 在收集方法上显示帮助。 <collection>可以是现有集合或不存在的集合的名称。 |
例 | 在MongoDB Shell中,让我们发出命令: db.mycoll.help() 注意:仅显示输出的一部分。 |
db。<集合> .help()
命令 | cloneCollectionAsCapped |
参量 | {
cloneCollectionAsCapped: <existing collection>,
toCollection: <capped collection>,
size: <capped size>
}
|
描述 | 从同一个数据库中现有的<existing collection>的非上限集合中创建一个新的上限集合<capped collection> 。 该操作不会影响原始的非上限集合。 |
例 | 在MongoDB Shell中,让我们发出命令: db.createCollection( 'mycoll' )
db.runCommand( {
cloneCollectionAsCapped: 'mycoll',
toCollection: 'mycollcapped',
size: 10
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/cloneCollectionAsCapped/ |
cloneCollectionAsCapped
db.printCollectionStats()
命令 | createIndexes |
参量 | {
createIndexes: <collection>,
indexes: [
{
key: {
<key-value_pair>,
<key-value_pair>,
...
},
name: <index_name>,
<option1>,
<option2>,
...
},
{ ... },
{ ... }
]
}
|
包装纸 | db。<集合>。 sureIndex(<键>,<选项>) |
描述 | 在集合<collection>上构建一个或多个索引。 |
例 | 在MongoDB Shell中,让我们发出命令: db.mycoll.ensureIndex({content:“ text”}) 另外,让我们使用runCommand()调用运行相同的命令: db.runCommand( {
createIndexes: 'mycoll',
indexes: [
{
key: { content: 'text' },
name: 'myindex'
}
]
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/createIndexes/ http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/ |
createIndexes
5.文件
在MongoDB中 ,数据以JSON文档的形式表示和存储:字段和值对。 更准确地说, MongoDB使用二进制 JSON(BSON)将序列化的文档存储在磁盘上,但对于用户而言,它看起来像常规JSON (至少在MongoDB shell中)。 支持的归档数据类型的范围令人印象深刻(请参考BSON数据类型参考):
- 双
- 串
- 目的
- 数组
- 二进制数据
- 未定义
- 对象编号
- 布尔型
- 日期
- 空值
- 正则表达式
- JavaScript(有/无范围)
- 32位整数
- 64位整数
- 时间戳记
还支持其他文档(所谓的嵌入式文档),数组,文档数组和引用。
字段名称有两个限制:
- 名称为_id的字段保留用作主键,并且在整个集合中必须是唯一的(它是不可变的,并且可以是数组以外的任何类型)。 此字段始终是文档中的第一个字段。
- 字段名称不能以美元符号“ $”开头,并且不能包含点“。”。 字符。 这些是保留的。
例如,代表一本书的简单文档可能如下所示:
{
"_id": ObjectId("536a5fe20ad33fcab3abfc0e"),
"title": "MongoDB In Action",
"author": { "firstName": "Kyle", "lastName": "Banker" },
"isbn": "978-1935182870",
"published": new Date("Dec 16, 2011" ),
"categories": [ "NoSQL", "Document Databases" ]
}
引用( DBRef )是从一个文档到另一个文档的指针(使用文档的_id字段的值,集合名称以及(可选)其数据库名称):
{
"$ref" : <collection>,
"$id" : <document _id>,
"$db" : <database>
}
对于熟悉RDBMS概念的用户,它看起来类似于外键和联接,但是MongoDB不支持联接:要解析引用,应执行一个或多个附加查询。 但是,通常表示文档之间的链接是一个非常有用的概念。 回到我们的Book示例,让我们假设作者存储在单独的集合中,并且每本书都会对其作者进行引用。 这是作者文档的示例:
{
"_id": ObjectId("536a60ef0ad33fcab3abfc0f"),
"firstName": "Kyle",
"lastName": "Banker"
}
现在,每本书都通过其_id字段和DBRef类型引用作者 :
{
"_id": ObjectId("536a5fe20ad33fcab3abfc0e"),
"title": "MongoDB In Action",
"author": DBRef( "authors", "536a60ef0ad33fcab3abfc0f" ),
"isbn": "978-1935182870",
"published": new Date("Dec 16, 2011" ),
"categories": [ "NoSQL", "Document Databases" ]
}
在本节的后面,我们将看到更多插入不同文档和使用文档引用的示例。
要牢记的一个硬限制是文档的最大大小(以BSON格式表示)为16兆字节 。 有关文档数据模型的更全面概述,请参阅官方文档 。
命令 | 插 |
参量 | {
insert: <collection>,
documents: [ <document>, <document>, <document>, ... ],
ordered: <true|false>,
writeConcern: { <write concern> }
}
|
包装纸 | db。<collection> .insert(<文档或文档数组>,{writeConcern:{…},已排序:<true | false>}) db。<collection> .save(<document>,writeConcern:{…}) |
描述 | 将一个或多个文档插入集合<collection>中,并返回包含所有插入状态的文档。 |
例 | 在MongoDB Shell中,让我们发出命令: db.books.insert( {
"title": "MongoDB In Action",
"author": { "firstName": "Kyle", "lastName": "Banker" },
"isbn": "978-1935182870",
"published": new Date("Dec 16, 2011" ),
"categories": [ "NoSQL", "Document Databases" ]
} )
另外,让我们使用runCommand()调用运行相同的命令: db.runCommand( {
insert: 'books',
documents: [
{
"title": "MongoDB In Action",
"author": { "firstName": "Kyle", "lastName": "Banker" },
"isbn": "978-1935182870",
"published": new Date("Dec 16, 2011" ),
"categories": [ "NoSQL", "Document Databases" ]
}
]
} )
考虑一个从Book到Author的示例,让我们在MongoDB shell中发出以下命令: db.authors.insert( {
"_id": "kyle-banker",
"firstName": "Kyle",
"lastName": "Banker"
} )
db.books.insert( {
"title": "MongoDB In Action",
"author": { "$ref": "authors", "$id": "kyle-banker" },
"isbn": "978-1935182870",
"published": new Date("Dec 16, 2011" ),
"categories": [ "NoSQL", "Document Databases" ]
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/insert/ http://docs.mongodb.org/manual/reference/method/db.collection.insert/ http://docs.mongodb.org/manual/reference/method/db.collection.save/ |
插
write / update命令具有写关注点的概念: MongoDB在报告写操作成功时提供的保证。 写关注的强度决定了保证的水平。 当插入,更新和删除的写操作很弱时,写操作将Swift返回。 因此,由于存在强烈的写入问题,客户端可能会等待MongoDB服务器实例确认写入操作。 在某些故障情况下,可能不会坚持执行写操作较弱的写操作。 我们将在第5部分中回写问题 。但是,如果您现在想获取更多详细信息,请参考官方文档 。
命令 | 更新 |
参量 | {
update: <collection>,
updates: [
{ q: <query>, u: <update>, upsert: <true|false>,
multi: <true|false> },
{ q: <query>, u: <update>, upsert: <true|false>,
multi: <true|false> },
{ q: <query>, u: <update>, upsert: <true|false>,
multi: <true|false> },
...
],
ordered: <true|false>,
writeConcern: { <write concern> }
}
|
包装纸 | db。<collection> .update(<query>,<update>,{upsert:<true | false>,multi:<true | false>,writeConcern:{…}}) db。<collection> .save(<document>,writeConcern:{…}) |
描述 | 如果没有文档与查询匹配并且参数upsert设置为true,则修改集合<collection>中的一个或多个现有文档或插入一个新文档。 该命令可以修改一个或多个现有文档的特定字段,或完全替换现有文档,具体取决于更新。 默认情况下,该命令将更新单个文档,除非参数multi为true,然后将执行所有与查询条件匹配的文档的更新。 查询语法将在“ 查询”部分中详细讨论。 |
例 | 在MongoDB Shell中,让我们发出命令(如果存在,将替换原始文档) : db.books.update(
{ "title": "MongoDB In Action" },
{
"rating": 5,
"categories": [ "NoSQL", "Document Databases", "MongoDB" ]
},
{ upsert: true }
)
因为我们执行了upsert ,所以执行的结果提示我们未找到匹配项,并且已插入新文档。 另外,让我们使用runCommand()调用运行相同的命令: db.runCommand( {
"update": "books",
"updates": [
{
"q": { "title": "MongoDB In Action" },
"u": {
"rating": 5,
"categories": [ "NoSQL", "Document Databases", "MongoDB" ]
},
upsert: true
}
]
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/update/ http://docs.mongodb.org/manual/reference/method/db.collection.update/ http://docs.mongodb.org/manual/reference/method/db.collection.save/ |
更新
update命令支持各种运算符来控制下表中列出的修改语义(有关更多详细信息,请参阅官方文档 ):
操作员 | 描述 |
$ inc | 将字段的值增加指定的数量。 |
$ mul | 将字段的值乘以指定的数量。 |
$重命名 | 重命名字段。 |
$ setOnInsert | 在upsert过程中,在创建文档时设置字段的值。 对修改现有文档的更新操作没有影响。 |
$ set | 设置现有文档中字段的值。 |
$未设定 | 从现有文档中删除指定的字段。 |
$ min | 仅在现有字段值小于指定值时更新。 |
最高$ | 仅在现有字段值大于指定值时更新。 |
$ currentDate | 将字段的值设置为当前日期,即日期或时间戳。 |
$ | 充当占位符,以在更新中更新与查询条件匹配的第一个元素。 |
$ addToSet | 仅当元素不存在于集合中时才将它们添加到现有数组中。 |
流行音乐 | 删除数组的第一项或最后一项。 |
$ pullAll | 从数组中删除所有匹配的值。 |
$拉 | 删除与指定查询匹配的所有数组元素。 |
$推 | 将项目添加到数组。 |
$每个 | 修改$ push和$ addToSet运算符以附加多个项以进行数组更新。 |
$切片 | 修改$ push运算符以限制更新数组的大小。 |
$ sort | 修改$ push运算符以对存储在数组中的文档重新排序。 |
$位置 | 修改$ push运算符,以指定要添加元素的数组中的位置。 |
$位 | 执行整数值的按位AND , OR和XOR更新。 |
$已隔离 | 修改多次更新的行为,以改善操作的隔离性。 |
更新
这是使用上表中的某些运算符进行更新的示例:
db.books.update(
{ "title": "MongoDB In Action" },
{
"$inc": { "rating": 1 },
"$addToSet": { "categories": "MongoDB" }
}
)
命令 | 删除 |
参量 | {
delete: <collection>,
deletes: [
{ q : <query>, limit : <integer> },
{ q : <query>, limit : <integer> },
{ q : <query>, limit : <integer> },
...
],
ordered: <true|false>,
writeConcern: { <write concern> }
}
|
包装纸 | db。<collection> .remove(<query>,{justOne:<true | false>,writeConcern:{…}}) |
描述 | 从集合<collection>中删除文档。 可以提供多个删除规范。 该命令无法对有上限的集合进行操作。 查询语法将在“ 查询”部分中详细讨论。 |
例 | 在MongoDB Shell中,让我们发出命令: db.books.remove(
{ "title": "MongoDB In Action" },
{ "justOne": true }
)
另外,让我们使用runCommand()调用运行相同的命令: db.runCommand( {
"delete": "books",
"deletes": [
{
"q": { "title": "MongoDB In Action" },
"limit": 1
}
]
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/delete/ http://docs.mongodb.org/manual/reference/method/db.collection.remove/ |
删除
命令 | findAndModify |
参量 | {
findAndModify: <collection>,
query: <query>,
sort: <sort>,
remove: <true|false>,
update: <update>,
new: <true|false>,
fields: <fields>,
upsert: <true|false>,
}
|
包装纸 | db。<集合>。 findAndModify({查询:<查询>,排序:<排序>,删除:<true | false>,更新:<update>,新建:<true | false>,字段:<fields>,upsert:<true | false> }) |
描述 | 在集合<collection>中查找,修改和返回单个文档。 默认情况下,返回的文档不包含更新所做的修改。 要返回修改后的文档,应将new选项设置为true 。 如果查询选择了多个文档,则sort参数确定应修改哪个文档。 |
例 | 在MongoDB Shell中,让我们发出命令(请注意,原始文档将被更新的文档替换): db.books.insert( {
"title": "MongoDB In Action",
"author": { firstName: "Kyle", lastName: "Banker" },
"isbn": "978-1935182870",
"published": new Date("Dec 16, 2011" ),
"categories": [ "NoSQL", "Document Databases" ]
} )
db.books.findAndModify( {
"query": { "title": "MongoDB In Action" },
"remove": false,
"new": true,
"update": {
"rating": 5,
"categories": [ "NoSQL", "Document Databases", "MongoDB" ]
}
} )
另外,让我们使用runCommand()调用运行相同的命令: db.runCommand( {
"findAndModify": "books",
"query": { "title": "MongoDB In Action" },
"update": {
"rating": 5,
"categories": [ "NoSQL", "Document Databases", "MongoDB" ]
},
"remove": false,
"new": true
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/findAndModify/ http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/ |
findAndModify
最新的MongoDB版本引入了批量操作支持,并将在第7部分中介绍索引。MongoDB安全,性能分析,索引,游标和批量操作指南 。
6.查询
查询用于检索MongoDB数据库中存储的数据。 In MongoDB , queries select documents from a single collection only (as we already know, joins are not supported). Queries specify the criteria to match the documents against. A query may include a projection to select the fields from the matching documents to return (quite useful to limit the amount of data that should be sent over the network).
命令 | db.<collection>.find(<criteria>, <projection>) |
描述 | Selects documents in a collection <collection> and returns a cursor to the selected documents. Cursors will be covered in Part 7. MongoDB Security, Profiling, Indexing, Cursors and Bulk Operations Guide . MongoDB supports a rich set of query operators (for more details please refer to official documentation ):
- $gt
- $gte
- $in
- $lt
- $lte
- $ne
- $nin
- $or
- $and
- $not
- $nor
- $exists
- $type
- $mod
- $regex
- $text
- $where
- $geoWithin
- $geoIntersects
- $near
- $nearSphere
- $all
- $elemMatch
- $size
- $elemMatch
- $meta
- $slice
The <projection> parameter specifies which fields of the document should be selected and returned to the clients: {
field1: <true|false>,
field2: <true|false>
...
}
|
例 | 在MongoDB Shell中,让我们发出命令:
- db.books.insert( { “title” : “MongoDB In Action” } )
- db.books.insert( { “title” : “MongoDB. The Definitive Guide” } )
- db.books.find( { “title” : { “$regex” : “MongoDB*” } } )
|
参考 | http://docs.mongodb.org/manual/reference/method/db.collection.find/ |
db.find
命令 | db.<collection>.findOne(<criteria>, <projection>) |
描述 | Returns only one document from the collection <collection> that satisfies the specified query criteria. If multiple documents match the query, this method returns the first document according to the natural order which reflects the order of documents on the disk. In capped collections , natural order is the same as insertion order. This command is very similar to db.<collection>.find(<criteria>, <projection>) described abovebut limits the result to at most one document. |
例 | 在MongoDB Shell中,让我们发出命令:
- db.books.insert( { “title” : “MongoDB In Action”, “price” : 10 } )
- db.books.insert( { “title” : “MongoDB. The Definitive Guide”, “price” : 15 } )
- db.books.findOne( { “price” : { “$gt” : 10 } }, { “title” : 1, “_id” : 0 } )
|
参考 | http://docs.mongodb.org/manual/reference/method/db.collection.findOne/ |
db.findOne
With latest release MongoDB allows to limit the query processing time using maxTimeMS option (milliseconds). Please notice that maxTimeMS only accounts for CPU time and does not include network latency or idle time.
db.books.find( { “title” : { “$regex” : “MongoDB” } } ) . maxTimeMS( 500 )
命令 | geoNear |
参量 | {
geoNear: <collection>,
near: <point>,
limit: <limit>,
num: <num>,
maxDistance: <distance>,
query: <query>,
spherical: <true|false>,
distanceMultiplier: <multiplier>,
includeLocs: <true|false>,
uniqueDocs: <true|false>
}
|
描述 | Specifies a point for which a geospatial query returns the closest documents from <collection> first. The query returns the documents from nearest to farthest. It is an alternative to the $near query operator. We are going to cover Geo indexes in details in Part 7. MongoDB Security, Profiling, Indexing, Cursors and Bulk Operations Guide . |
例 | 在MongoDB Shell中,让我们发出命令: db.stores.insert( { "name": "BestBuy", "location": [ 10, 15 ] } )
db.stores.ensureIndex( { "location": "2d" } )
db.runCommand( {
"geoNear": "stores",
"near": [ 10, 14 ],
"maxDistance": 6
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/geoNear/ |
geoNear
命令 | geoSearch |
参量 | {
geoSearch : <collection>,
near: <point>,
maxDistance: <distance>,
search: <query>,
limit: <limit>
}
|
描述 | Returns the documents from collection <collection> based on location coordinates after collecting results based on some other query. |
例 | 在MongoDB Shell中,让我们发出命令: db.stores.insert( { "name": "BestBuy", "location": [ 10, 15 ] } )
db.stores.ensureIndex(
{ "location": "geoHaystack", "name": 1 },
{ "bucketSize": 1 }
)
db.runCommand( {
"geoSearch": "stores",
"near": [ 10, 14 ],
"maxDistance": 6,
"search": { "name": "BestBuy" }
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/geoSearch/ |
geoSearch
In Part 7. MongoDB Security, Profiling, Indexing, Cursors and Bulk Operations Guide we will go through some advanced topics related to cursors, query profiling and query plans.
7. Aggregations
MongoDB provides a family of commands to perform collection-wide aggregation operations (so called aggregation framework ). Most the commands we are going to cover in this section except mapReduce , which will be covered in Part 6. MongoDB Map Reduce Tutorial .
命令 | distinct |
参量 | {
distinct: <collection>,
key: <field>,
query: <query>
}
|
包装纸 | db.collection.distinct(<field>, <query>) |
描述 | Finds the distinct values for a specified key <field> across a single collection <collection> . The query syntax is discussed in details in Queries section. |
例 | In MongoDB shell, let us issue the commands : db.books.insert( { "title": "MongoDB In Action" } )
db.books.insert( { "title": "MongoDB. The Definitive Guide" } )
db.books.distinct("title" )
Alternatively, let us run the same command using runCommand() call: db.runCommand( { “distinct “: “books”, “ key “: “title” } ) |
参考 | http://docs.mongodb.org/manual/reference/command/distinct/ http://docs.mongodb.org/manual/reference/method/db.collection.distinct/ |
不同
命令 | group |
参量 | {
group:
{
ns: <namespace>,
key: <key>,
$reduce: <reduce function>,
Initial: <initial>,
$keyf: <key function>,
cond: <query>,
finalize: <finalize function>
}
}
|
包装纸 | db.collection.group({ key: <key>, reduce: <reduce function>, initial: <initial>, keyf: <key function>, cond: <query>, finalize: <finalize function> }) |
描述 | Groups documents in a collection <collection> by the specified key <field> and performs simple aggregation functions, such as computing counts and sums. For the users familiar with RDBMS concepts, this command is analogous to a SELECT <…> GROUP BY <…> statement in SQL . The query syntax is discussed in details in Queries section. |
例 | In MongoDB shell, let us issue the commands : db.books.insert( { "title": "MongoDB In Action" } )
db.books.insert( { "title": "MongoDB. The Definitive Guide" } )
db.books.group(
{
"key": "title",
"reduce": function ( curr, result ) { result.total += 1 },
"initial": { "total": 0 }
} )
Alternatively, let us run the same command using runCommand() call: db.runCommand( {
"group": {
"ns": "books",
"key": "title",
"$reduce": function ( curr, result ) { result.total += 1 },
"initial": { "total": 0 }
}
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/group/ http://docs.mongodb.org/manual/reference/method/db.collection.group/ |
组
命令 | aggregate |
参量 | {
aggregate: <collection>,
pipeline: [ <stage>, <...> ],
explain: <true|false>,
allowDiskUse: <true|false>,
cursor: <cursor>
}
|
包装纸 | db.collection.aggregate(<pipeline>, { explain: <true|false>, allowDiskUse: <true|false>, cursor: <cursor> } ) |
描述 | Performs aggregation operation using the aggregation pipeline <pipeline> : processing the data from a collection <collection> with a sequence of stage-based manipulations (for more details please refer to official documentation ). The pipeline aggregation operators include:
- $project
- $match
- $redact
- $limit
- $skip
- $unwind
- $group
- $sort
- $geoNear
- $out
Each pipeline operator also supports the expression operators to calculate values within the pipeline (for more details please refer to official documentation ). |
例 | In MongoDB shell, let us issue the commands : db.books.insert( { "title": "MongoDB In Action", "price": 10 } )
db.books.insert( { "title": "MongoDB. The Definitive Guide",
"price": 15 } )
db.books.aggregate( [
{ "$match": { "title": { "$regex": "MongoDB*" } } },
{ "$group": { "_id": "mongodb", "total": { "$sum": "$price" } } },
{ "$sort": { "total": -1 } }
])
Alternatively, let us run the same command using runCommand() call: db.runCommand( {
"aggregate": "books",
"pipeline": [
{ "$match": { "title": { "$regex": "MongoDB*" } } },
{ "$group": { "_id": "mongodb", "total": { "$sum": "$price" } } },
{ "$sort": { "total": -1 } }
]
})
|
参考 | http://docs.mongodb.org/manual/reference/command/aggregate/ http://docs.mongodb.org/manual/reference/method/db.collection.aggregate/ |
骨料
8. GridFS
GridFS allows storing and retrieving files that exceed the MongoDB document size limit of 16MB (see please Documents section). Instead of storing a file in a single document, GridFS divides a file into parts (or chunks) and stores each of those chunks as a separate document. By default, the size of the chunk is 255KB . GridFS stores files in two collections (the fs prefix may be changed):
- fs.chunks : stores file content as binary chunks
- fs.files : stores file metadata
有关更多详细信息,请参阅官方文档 。
命令 | filemd5 |
参量 | {
filemd5: <object id>,
root: <root>
}
|
描述 | Returns the MD5 hashes for a single file stored using the GridFS specification. |
例 | In the shell, let us run the command: bin/mongofiles put bin/mongofiles 在MongoDB Shell中,让我们发出命令: db.runCommand( {
"filemd5": ObjectId('536bbb3ffa052c2b649d2ee3'),
"root": "fs"
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/filemd5/ |
filemd5
8. Server
MongoDB server supports a vast variety of commands to inspect its internals and monitor current activities. To satisfy the needs of enterprise deployments, MongoDB has a powerful, role-based security model to ensure that users and applications have access to only the data they are allowed to. Being a large topic, it will be covered in Part 7. MongoDB Security, Profiling, Indexing, Cursors and Bulk Operations Guide .
命令 | eval |
参量 | {
eval: <function>,
args: [ <arg1>, <arg2> ... ],
nolock: <true|false>
}
|
包装纸 | db.eval(<function>, <arguments>) |
描述 | Provides the ability to evaluate JavaScript functions on the MongoDB server. |
例 | 在MongoDB Shell中,让我们发出命令: db.eval(
function(title) {
return db.books.insert( { "title": title } ).nInserted == 1;
},
"MongoDB in Action"
)
Alternatively, let us run the same command using runCommand() call: db.runCommand( {
"eval": function(title) {
return db.books.insert( { "title": title } ).nInserted == 1;
},
"args": [ "MongoDB in Action" ]
} )
|
参考 | http://docs.mongodb.org/manual/reference/command/eval/ http://docs.mongodb.org/manual/reference/method/db.eval/ |
eval
命令 | db.killOp(<opid>) |
描述 | Terminates an operation as specified by the operation ID (returned by db.currentOp() ). The recommendation for this command is to use it to terminate the operations initiated by clients only and do not terminate internal database operations. |
参考 | http://docs.mongodb.org/manual/reference/method/db.killOp/ |
db.killOp()
命令 | top |
描述 | Returns usage statistics for each collection and provides amount of time (in microseconds) spent and operation counts for the following event types:
- total
- readLock
- writeLock
- queries
- getmore
- insert
- update
- remove
- commands
它应在管理数据库的上下文中运行。 |
例 | In MongoDB shell, let us issue the command: db.adminCommand( { top: 1 } ) Note: Only a fragment of the output is shown. |
参考 | http://docs.mongodb.org/manual/reference/command/top/ |
最佳
命令 | getLog |
参量 | {
getLog: <log>
}
|
描述 | Returns recent messages from the current MongoDB server instance process log. The <log> parameter could have one of the following values:
- global : the combined output of all recent log entries
- startupWarnings : outputs errors or warnings occurred during the server start
- rs : outputs log entries related to replica set activity
它应在管理数据库的上下文中运行。 |
例 | In MongoDB shell, let us issue the command: db.adminCommand( { getLog: 1 } ) Note: Only a fragment of the output is shown. |
参考 | http://docs.mongodb.org/manual/reference/command/getLog/ |
getLog
命令 | touch |
参量 | {
touch: <collection>,
data: <true|false>,
index: <true|false>
}
|
描述 | Loads data from the data storage layer into memory. It can load the indexes, data (documents) or both data (documents) and indexes. Execution of this command ensures that a collection <collection> , and/or its indexes, is/are in memory before another operation begins. By loading the collection or indexes into memory, MongoDB server instance might be able to perform subsequent operations more efficiently. |
例 | 在MongoDB Shell中,让我们发出命令: db.createCollection( "mycoll" )
db.runCommand( { touch: "mycoll", index: true } )
|
参考 | http://docs.mongodb.org/manual/reference/command/touch/ |
touch
命令 | setParameter |
参量 | {
<option>: <value>
}
|
描述 | Allows modifying MongoDB server instance options normally set on the command line. The <option> parameter may have one of the following values:
- journalCommitInterval
- logLevel
- logUserIds
- notablescan
- quiet
- replApplyBatchSize
- replIndexPrefetch
- syncdelay
- traceExceptions
- textSearchEnabled
- sslMode
- clusterAuthMode
- userCacheInvalidationIntervalSecs
它应在管理数据库的上下文中运行。 |
例 | In MongoDB shell, let us issue the command: db.adminCommand( { setParameter: 1, “textSearchEnabled”: true } ) |
参考 | http://docs.mongodb.org/manual/reference/command/setParameter/ |
setParameter
命令 | getParameter |
参量 | {
<option>: <value>
}
|
描述 | Allows retrieving the value of MongoDB server instance options normally set on the command line. The <option> parameter follows the setParameter command specification. 它应在管理数据库的上下文中运行。 |
例 | In MongoDB shell, let us issue the command: db.adminCommand( { getParameter: 1, “textSearchEnabled”: 1 } ) |
参考 | http://docs.mongodb.org/manual/reference/command/getParameter/ |
getParameter
9.接下来
In this section we have played quite a lot with MongoDB shell and seen most of the MongoDB commands in action. In the next section we are going to learn how to integrate MongoDB in your Java applications.
翻译自: https://www.javacodegeeks.com/2015/09/mongodb-shell-guide-operations-and-commands.html
mongodb shell