mongotranslate
说明
mongotranslate
是一款学习工具,旨在帮助用户了解如何用MongoDB 聚合语言表示SQL查询。 BI Connector 的SQL到聚合转换引擎提供转换,这些转换还可用于解决特定的BI Connector转换问题。
mongotranslate
是一个独立运行的程序。 它需要由 生成的 drdl mongodrdl
文件,但不要求mongosqld
或mongod
在执行时处于运行状态。
使用
mongotranslate
通过以下语法实现:
mongotranslate [--query | --queryFile] <query | queryfile> [options]
命令行选项
--query
指定要转换为MongoDB聚合管道的SQL查询。 需要
--query
或--queryFile
。
--queryFile
指定包含要转换为MongoDB聚合管道的SQL查询的文件的路径。 需要
--query
或--queryFile
。
--schema
必需。 指定
.drdl
模式文件或包含由mongodrdl
程序创建的一个或多个.drdl
模式文件的目录,以便在将SQL查询转换为聚合管道时使用。
--dbName
默认值:
test
SQL 查询中用于非限定表名称的数据库名称。
以下示例使用名为
fruit
的集合和--dbName
选项来指定fruit
位于groceries
数据库中:mongotranslate "SELECT * FROM fruit WHERE _id > 100;" \ --schema schema.drdl --dbName groceries 如果不使用
--dbName
选项指定数据库,则mongotranslate
假定fruit
位于test
数据库中。如果模式不包含名为test
的数据库,或者test
数据库中的表名fruit
,则mongotranslate
将返回错误。以下示例使用完全限定的表名,因此不需要
--dbName
选项。mongotranslate "SELECT * FROM groceries.fruit WHERE _id > 100;" \ --schema schema.drdl 如果您在SQL查询中为每个表名称指定一个数据库,则使用
--dbName
选项将被忽略。
示例
以下示例指定用于翻译的内联查询:
mongotranslate --query=“select test.name from restaurants where name like 'Brooklyn%'” \ --schema=schema.drdl
上述命令返回以下结果:
[ {"$match": {"name": {"$regex": "^Brooklyn.*$","$options": "i"}}}, {"$project": {"test_DOT_restaurants_DOT_name": "$name","_id": {"$numberInt":"0"}}}, ]
注意
如需在 --query
参数内引用字符串,请务必使用单引号。如果必须在查询中使用双引号或回车键,请使用 --queryFile
选项。
以下示例指定查询文件并返回单行结果:
mongotranslate --queryFile=query.txt --schema=schema.drdl --format=none
以下示例使用--explain
选项:
mongotranslate --query="select count(name) from restaurants;" \ --schema=schema.drdl --explain
上述命令返回以下结果:
[ { "ID": 1, "StageType": "MongoSourceStage", "Columns": "[{name: 'count(name)', type: 'int'}]", "Sources": null, "Database": {}, "Tables": {}, "Aliases": {}, "Collections": {}, "Pipeline": {}, "PipelineExplain": {}, "PushdownFailures": null } ]