说明
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默认值:
testSQL 查询中用于非限定表名称的数据库名称。
以下示例使用名为
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 } ]