diff --git a/packages/tools/src/driverBase.ts b/packages/tools/src/driverBase.ts index 1517269c6..d76318b9d 100644 --- a/packages/tools/src/driverBase.ts +++ b/packages/tools/src/driverBase.ts @@ -154,4 +154,11 @@ export const driverBase = { getFilterBehaviour(dataType: string, standardFilterBehaviours) { return detectSqlFilterBehaviour(dataType); }, + + getCollectionExportQueryScript(collection: string, condition: any, sort: any) { + return null; + }, + getCollectionExportQueryJson(collection: string, condition: any, sort: any) { + return null; + }, }; diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index b8e6888cc..6cd8ee45f 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -159,7 +159,7 @@ export interface EngineDriver extends FilterBehaviourProvider { getAuthTokenFromCode(connection, options): Promise; getAccessTokenFromAuth(connection, req): Promise; getCollectionExportQueryScript(collection: string, condition: any, sort: any): string; - getCollectionExportQueryJson(collection: string, condition: any, sort: any): string; + getCollectionExportQueryJson(collection: string, condition: any, sort: any): {}; analyserClass?: any; dumperClass?: any; diff --git a/packages/web/src/datagrid/CollectionDataGridCore.svelte b/packages/web/src/datagrid/CollectionDataGridCore.svelte index 5aca84804..85ec10afd 100644 --- a/packages/web/src/datagrid/CollectionDataGridCore.svelte +++ b/packages/web/src/datagrid/CollectionDataGridCore.svelte @@ -172,17 +172,27 @@ // $: if (onChangeGrider) onChangeGrider(grider); function getExportQuery() { - return `db.collection('${pureName}') - .find(${JSON.stringify(buildConditionForGrid($$props) || {})}) - .sort(${JSON.stringify(buildMongoSort($$props) || {})})`; + return display?.driver?.getCollectionExportQueryScript?.( + pureName, + buildConditionForGrid($$props), + buildMongoSort($$props) + ); + // return `db.collection('${pureName}') + // .find(${JSON.stringify(buildConditionForGrid($$props) || {})}) + // .sort(${JSON.stringify(buildMongoSort($$props) || {})})`; } function getExportQueryJson() { - return { - collection: pureName, - condition: buildConditionForGrid($$props) || {}, - sort: buildMongoSort($$props) || {}, - }; + return display?.driver?.getCollectionExportQueryJson?.( + pureName, + buildConditionForGrid($$props), + buildMongoSort($$props) + ); + // return { + // collection: pureName, + // condition: buildConditionForGrid($$props) || {}, + // sort: buildMongoSort($$props) || {}, + // }; } export async function exportGrid() { diff --git a/plugins/dbgate-plugin-mongo/src/frontend/driver.js b/plugins/dbgate-plugin-mongo/src/frontend/driver.js index 4945c19e3..897a14ab6 100644 --- a/plugins/dbgate-plugin-mongo/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mongo/src/frontend/driver.js @@ -1,4 +1,5 @@ const { driverBase } = global.DBGATE_TOOLS; +const { convertToMongoCondition } = require('./convertToMongoCondition'); const Dumper = require('./Dumper'); const { mongoSplitterOptions } = require('dbgate-query-splitter/lib/options'); @@ -97,6 +98,19 @@ const driver = { getFilterBehaviour(dataType, standardFilterBehaviours) { return standardFilterBehaviours.mongoFilterBehaviour; }, + + getCollectionExportQueryScript(collection, condition, sort) { + return `db.collection('${collection}') + .find(${JSON.stringify(convertToMongoCondition(condition || {}))}) + .sort(${JSON.stringify(sort || {})})`; + }, + getCollectionExportQueryJson(collection, condition, sort) { + return { + collection, + condition: convertToMongoCondition(condition || {}), + sort: sort || {}, + }; + }, }; module.exports = driver;