mongo Shell 快速参考

在本页面

mongo Shell 命令历史记录

您可以使用向上和向下箭头键检索在mongo shell 中发出的先前命令。命令历史记录存储在~/.dbshell文件中。有关更多信息,请参见.dbshell

命令行选项

mongo shell 可以使用许多选项启动。有关所有可用选项的详细信息,请参见mongo shell页。

下表显示了mongo的一些常用选项:

OptionDescription
--help显示命令行选项
--nodb在不连接数据库的情况下启动mongo shell。


要稍后连接,请参阅打开新连接
| --shell |与 JavaScript 文件(即<file.js>)结合使用,以在运行 JavaScript 文件后在mongo shell 中 continue。
有关示例,请参见JavaScript file

Command Helpers

mongo shell 提供了各种帮助。下表显示了一些常见的帮助方法和命令:

帮助方法和命令Description
helpShow help.
db.help()显示有关数据库方法的帮助。
db.<collection>.help()在收集方法上显示帮助。 <collection>可以是现有集合或不存在集合的名称。
show dbs打印服务器上所有数据库的列表。
use <db>将当前数据库切换到<db>mongo shell 变量db设置为当前数据库。
show collections打印当前数据库的所有集合的列表
show users打印当前数据库的用户列表。
show roles打印当前数据库的所有角色的列表,包括用户定义角色和内置角色。
show profile打印耗时 1 毫秒或更长时间的五个最新操作。有关更多信息,请参见database profiler上的文档。
show databases打印所有可用数据库的列表。
load()执行一个 JavaScript 文件。有关更多信息,请参见为 mongo Shell 编写脚本

基本的 Shell JavaScript 操作

mongo shell 为数据库操作提供JavaScript API

mongo shell 中,db是引用当前数据库的变量。该变量将自动设置为默认数据库test或在使用use <db>切换当前数据库时设置。

下表显示了一些常见的 JavaScript 操作:

JavaScript 数据库操作Description
db.auth()如果以安全模式运行,请对用户进行身份验证。
coll = db.<collection>将当前数据库中的特定集合设置为变量coll,如以下示例所示:

coll = db.myCollection;
您可以使用变量在myCollection上执行操作,如以下示例所示:
coll.find();
db.collection.find()查找集合中的所有文档并返回游标。
有关更多信息和示例,请参见db.collection.find()Query Documents
有关在mongo shell 中处理光标的信息,请参见在 mongo Shell 中迭代游标
db.collection.insertOne()将新文档插入集合中。
db.collection.insertMany()将多个新文档插入到集合中。
db.collection.updateOne()更新集合中的单个现有文档。
db.collection.updateMany()更新集合中的多个现有文档。
db.collection.save()插入新文档或更新集合中的现有文档。
db.collection.deleteOne()从集合中删除单个文档。
db.collection.deleteMany()从集合中删除文档。
db.collection.drop()完全删除或删除集合。
db.collection.createIndex()如果索引不存在,则在集合上创建新索引;否则,该操作将无效。
db.getSiblingDB()使用相同的连接返回对另一个数据库的引用,而无需显式切换当前数据库。这允许跨数据库查询。

有关在 shell 中执行操作的更多信息,请参见:

Keyboard Shortcuts

mongo shell 提供的大多数键盘快捷键类似于在bash shell 或 Emacs 中找到的快捷键。对于某些功能,mongo提供了多个键绑定,以适应几种熟悉的范例。

下表列举了mongo shell 支持的击键:

KeystrokeFunction
Up-arrowprevious-history
Down-arrownext-history
Homebeginning-of-line
Endend-of-line
Tabautocomplete
Left-arrowbackward-character
Right-arrowforward-character
Ctrl-left-arrowbackward-word
Ctrl-right-arrowforward-word
Meta-left-arrowbackward-word
Meta-right-arrowforward-word
Ctrl-Abeginning-of-line
Ctrl-Bbackward-char
Ctrl-Cexit-shell
Ctrl-Ddelete-char(或退出 Shell)
Ctrl-Eend-of-line
Ctrl-Fforward-char
Ctrl-Gabort
Ctrl-Jaccept-line
Ctrl-Kkill-line
Ctrl-Lclear-screen
Ctrl-Maccept-line
Ctrl-Nnext-history
Ctrl-Pprevious-history
Ctrl-Rreverse-search-history
Ctrl-Sforward-search-history
Ctrl-Ttranspose-chars
Ctrl-Uunix-line-discard
Ctrl-Wunix-word-rubout
Ctrl-Yyank
Ctrl-Z挂起(作业控制在 Linux 中有效)
Ctrl-H(即 Backspace)backward-delete-char
Ctrl-I(即 Tab)complete
Meta-Bbackward-word
Meta-Ccapitalize-word
Meta-Dkill-word
Meta-Fforward-word
Meta-Ldowncase-word
Meta-Uupcase-word
Meta-Yyank-pop
Meta-[Backspace]backward-kill-word
Meta-<beginning-of-history
Meta->end-of-history

Queries

mongo Shell 中,使用find()findOne()方法执行读取操作。

find()方法返回一个游标对象,mongo Shell 对其进行迭代以在屏幕上打印文档。默认情况下,mongo打印前 20 个结果。mongo Shell 将提示用户“ Type it”以 continue 迭代接下来的 20 个结果。

下表提供了mongo shell 中的一些常见读取操作:

Read OperationsDescription
db.collection.find(<query>)在集合中找到符合<query>条件的文档。如果未指定<query>条件或该条件为空(即{}),则读取操作将选择集合中的所有文档。


以下示例在users集合中选择name字段等于"Joe"的文档:
coll = db.users;
coll.find({ name: "Joe" });
有关指定<query>标准的更多信息,请参见指定平等条件
| db.collection.find(<query>, <projection>) |查找符合<query>条件的文档,并仅返回<projection>中的特定字段。
下面的示例从集合中选择所有文档,但仅返回name字段和_id字段。除非明确指定不返回_id,否则始终返回。
coll = db.users;
coll.find({ },);
有关指定<projection>的更多信息,请参见从查询返回的项目字段
| db.collection.find().sort(<sort order>) |返回指定的<sort order>的结果。
以下示例从集合中选择所有文档,并返回按name字段升序(1)排序的结果。使用-1降序排列:
coll = db.users;
coll.find()。sort({ name: 1 }); |
| db.collection.find(<query>).sort(<sort order>) |返回指定的<sort order>中符合<query>条件的文档。
| db.collection.find(...)。limit( <n>) |将结果限制为<n>行。如果只需要一定数量的行以获得最佳性能,则强烈建议使用。
| db.collection.find(...)。skip( <n>) |跳过<n>个结果。|
| db.collection.count() |返回集合中的文档总数。
| db.collection.find(<query>).count() |返回与查询匹配的文档总数。
count()忽略limit()skip()。例如,如果 100 条记录匹配,但限制为 10,则count()将返回 100.这比迭代自己的速度更快,但仍然需要时间。
| db.collection.findOne(<query>) |查找并返回单个文档。如果找不到,则返回 null。
下面的示例在users集合中选择一个文档,其中name字段与"Joe"匹配:
coll = db.users;
coll.findOne({ name: "Joe" });
在内部,findOne()方法是具有limit(1)find()方法。

有关更多信息和示例,请参见Query Documents文档。请参阅查询和投影运算符以指定其他查询运算符。

错误检查方法

在 2.6 版中进行了更改。

mongo shell 写方法现在将Write Concern直接集成到方法执行中,而不是使用单独的db.getLastError()方法。这样,write 方法现在返回一个WriteResult()对象,该对象包含操作结果,包括所有写错误和写关注错误。

以前的版本使用db.getLastError()db.getLastErrorObj()方法返回错误信息。

Management 命令助手

下表列出了一些支持数据库 Management 的常用方法:

JavaScript 数据库 Management 方法Description
db.cloneDatabase(<host>)从指定的<host>克隆当前数据库。 <host>数据库实例必须处于 noauth 模式。
db.copyDatabase( <from>, <to>, <host>)<from>数据库从<host>复制到当前服务器上的<to>数据库。


<host>数据库实例必须处于noauth模式。
| db.fromColl.renameCollection(<toColl>) |将集合从fromColl重命名为<toColl>。参见Naming Restrictions
| db.getCollectionNames() |获取当前数据库中所有集合的列表。
| db.dropDatabase() |删除当前数据库。

有关方法的完整列表,另请参见Management 数据库方法

打开其他连接

您可以在mongo shell 中创建新连接。

下表显示了创建连接的方法:

JavaScript 连接创建方法Description
db = connect("<host><:port>/<dbname>")打开一个新的数据库连接。
conn =新的 Mongo()

db = conn.getDB(“ dbname”)
使用new Mongo()打开到新服务器的连接。
使用连接的getDB()方法选择数据库。

另请参阅打开新连接,以获取有关从mongo shell 打开新连接的更多信息。

Miscellaneous

下表显示了一些其他方法:

MethodDescription
Object.bsonsize(<document>)打印\ _2 的BSON大小(以字节为单位)

Additional Resources

考虑以下针对mongo shell 及其接口的参考资料:

此外,MongoDB 源代码存储库包括一个jstests directory,其中包含许多mongo shell 脚本。