mongo Shell 快速参考

在本页面

[success] Note

下面的文档是MongoDB服务器下载.中包含的mongo shell。有关新的MongoDB Shell ,mongosh的信息,请参考mongosh文档

要了解这两种shell的区别,请参阅Comparison of the mongo Shell and mongosh.

mongo Shell命令历史

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

命令行选项

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

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

选项

说明

--help

显示命令行选项

--nodb

在不连接数据库的情况下启动mongo shell。 要稍后连接,请参阅Opening New Connections

--shell

与JavaScript文件(即<file.js>])结合使用,以在运行JavaScript文件后在mongo shell中继续。 有关示例,请参见 JavaScript file

命令助手

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

帮助方法和命令

描述

help()

打印当前数据库的列表

db.help()

打印当前数据库的所有角色的列表,包括用户定义的角色和内置角色。

db.<collection>.help()

打印耗时1毫秒或更长时间的五个最新操作。 有关更多信息,请参见数据库分析器上的文档。

show dbs

打印所有可用数据库的列表。 该操作对应于listDatabases命令。 如果部署使用访问控制运行,则该操作将根据用户权限返回不同的值。 有关详细信息,请参见 listDatabases

use<db>

将当前数据库切换到<db>。 mongo shell变量db设置为当前数据库。

show collections

打印当前数据库的所有集合的列表。 另可参考: show collections

show users

打印当前数据库列表

show roles

打印当前数据库的所有角色的列表,包括用户定义角色和内置角色。

show profile

打印耗时1毫秒或更长时间的五个最新操作。 有关更多信息,请参见 database profiler

show databases

打印所有可用数据库的列表。 该操作对应于 listDatabases 命令。 如果部署使用访问控制运行,则该操作将根据用户权限返回不同的值。 有关详细信息,请参见 listDatabases

load()

执行一个JavaScript文件。 有关更多信息,请参见 Write Scripts for the mongo Shell

Shell基本JavaScript操作

mongo shell提供了用于数据库操作的JavaScript API

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

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

JavaScript数据库操作

说明

db.auth()

如果以安全模式运行,请对用户进行身份验证。

coll = db.<collection>

将当前数据库中的特定集合设置为变量coll,如以下示例所示: coll = db.myCollection; 您可以使用变量在myCollection上执行操作,如以下示例所示: coll.find();

db.collection.find()

查找集合中的所有文档并返回一个游标。 有关更多信息和示例,请参见db.collection.find()和查询文档。 有关在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中执行操作的更多信息,请参见:

键盘快捷键

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

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

按键

功能

Up-arrow

以前的历史

Down-arrow

下一个历史

Home

行起点

End

行尾

Tab

自动完成

Left-arrow

后退字符

Right-arrow

向前字符

Ctrl-left-arrow

后向词

Ctrl-right-arrow

前向词

Meta-left-arrow

后向词

Meta-right-arrow

前向词

Ctrl-A

上线

Ctrl-B

向后字符

Ctrl-C

退出

Ctrl-D

删除字符(或退出)

Ctrl-E

行结束

Ctrl-F

转发字符

Ctrl-G

中止

Ctrl-J

接受线

Ctrl-K

杀死线

Ctrl-L

清除屏幕

Ctrl-M

接受线

Ctrl-N

下一个历史记录

Ctrl-P

以前的历史记录

Ctrl-R

反向搜索历史

Ctrl-S

正向搜索历史

Ctrl-T

转置字符

Ctrl-U

丢弃Unix线

Ctrl-W

Unix单词清除

Ctrl-Y

拉动

Ctrl-Z

挂起(作业控制在Linux中有效)

Ctrl-H (i.e. Backspace)

向后删除字符

Ctrl-I (i.e. Tab)

完成

Meta-B

后退词

Meta-C

大写词

Meta-D

杀死命令

Meta-F

转发字

Meta-L

小写词

Meta-U

大写词

Meta-Y

yank-pop

Meta-[Backspace]

撤销杀死命令

Meta-<

历史开始

Meta->

历史结束

查询

在mongo shell中,使用find()findOne() 方法执行读取操作。 find()方法返回一个游标对象,mongo shell对其进行迭代以在屏幕上打印文档。 默认情况下,mongo 打印前20个结果。mongo shell将提示用户“输入”以继续迭代接下来的20个结果。 下表提供了mongo shell中的一些常见读取操作:

读取操作

说明描述

db.collection.find(<query>)

在集合中找到符合<query>条件的文档。 如果未指定<query>条件或该条件为空(即{}),则读取操作将选择集合中的所有文档。 以下示例在用户集合中选择name字段等于“ Joe”的文档:coll = db.users;coll.find( { name: "Joe" } );有关指定<query>条件的更多信息,请参见: Specify Equality Condition.

db.collection.find(<query>, <projection>)

查找符合<query>条件的文档,并仅返回<projection>中的特定字段。 以下示例从集合中选择所有文档,但仅返回名称字段和_id字段。 除非明确指定不返回,否则始终返回_idcoll = db.users; coll.find({},{name:true}); 有关指定<projection>的更多信息,请参见Project Fields to Return from Query.。

db.collection.find().sort(<sort order>)

以指定的<sort order>返回结果。 以下示例从集合中选择所有文档,并返回按名称字段升序+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>行。 如果只需要一定数量的行以获得最佳性能,则强烈建议使用。

db.collection.find( ... ).skip( )

跳过<n>个结果。

db.collection.count()

返回集合中的文档总数。

db.collection.find().count()

返回与查询匹配的文档总数。 count()忽略limit()skip().例如,如果有100条记录匹配,但限制为10,则count()将返回100。这比迭代自己的速度更快,但仍然需要时间。

db.collection.findOne()

查找并返回一个文档。 如果找不到,则返回null。 以下示例在用户集合中选择一个名称与“ Joe”匹配的文档: coll = db.users; coll.findOne({name:“ Joe”}); 在内部,findOne()方法是带有limit(1)find()方法。

有关更多信息和示例,请参阅Query Documents 。 请参阅Query and Projection Operators

错误检查方法

mongo shell write方法将Write Concern直接集成到方法执行中,并返回一个WriteResult()对象,该对象包含操作结果,包括所有写错误和写关注错误。

行政命令助手

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

JavaScript数据库管理

方法说明

db.fromColl.renameCollection(<toColl>)

将集合从fromColl重命名为<toColl>。 请参阅Naming Restrictions

db.getCollectionNames()

获取当前数据库中所有集合的列表。

db.dropDatabase()

删除当前数据库。

另请参见administrative database methods以获取方法的完整列表。

打开其他连接

您可以在mongo shell中创建新的连接。 下表显示了创建连接的方法:

JavaScript连接创建方法

说明

db = connect("<host><:port>/<dbname>")

打开一个新的数据库连接。

conn = new Mongo() db = conn.getDB("dbname")

使用新的Mongo()打开与新服务器的连接。 使用连接的getDB()方法选择数据库。

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

多样式

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

方法

描述

Object.bsonsize(<document>)

Prints the BSON size of a <document> in bytes

其他资源

考虑以下解决mongo shell及其接口的参考资料:

另外,MongoDB源代码存储库包括一个jstests目录,该目录包含许多mongo shell脚本。

译者:王恒

校对:杨帅