diff --git a/packages/datalib/src/PerspectiveDataLoader.ts b/packages/datalib/src/PerspectiveDataLoader.ts index bcee5158d..327b0478d 100644 --- a/packages/datalib/src/PerspectiveDataLoader.ts +++ b/packages/datalib/src/PerspectiveDataLoader.ts @@ -123,7 +123,7 @@ export class PerspectiveDataLoader { groupByColumns: bindingColumns, aggregateColumns: [ { - alias: 'acount', + alias: 'pergrpsize', aggregateFunction: 'count', }, ], @@ -156,8 +156,8 @@ export class PerspectiveDataLoader { if (response.errorMessage) return response; return response.rows.map(row => ({ - ...row._id, - _perspective_group_size_: parseInt(row.count), + ...row, + _perspective_group_size_: parseInt(row.pergrpsize), })); } diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index 8d9f7d9c2..6719c1543 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -463,6 +463,8 @@ export abstract class PerspectiveTreeNode { order: 'ASC' as 'ASC', })); if (pkColumns) return pkColumns; + const uqColumns = (table as CollectionInfo)?.uniqueKey; + if (uqColumns?.length >= 1) return uqColumns.map(x => ({ columnName: x.columnName, order: 'ASC' })); const columns = (table as TableInfo | ViewInfo)?.columns; if (columns) return [{ columnName: columns[0].columnName, order: 'ASC' }]; return [{ columnName: '_id', order: 'ASC' }]; diff --git a/plugins/dbgate-plugin-mongo/src/backend/driver.js b/plugins/dbgate-plugin-mongo/src/backend/driver.js index a077469c0..ffb777b63 100644 --- a/plugins/dbgate-plugin-mongo/src/backend/driver.js +++ b/plugins/dbgate-plugin-mongo/src/backend/driver.js @@ -305,7 +305,12 @@ const driver = { } else if (options.aggregate) { let cursor = await collection.aggregate(convertObjectId(convertToMongoAggregate(options.aggregate))); const rows = await cursor.toArray(); - return { rows: rows.map(transformMongoData) }; + return { + rows: rows.map(transformMongoData).map((x) => ({ + ...x._id, + ..._.omit(x, ['_id']), + })), + }; } else { // console.log('options.condition', JSON.stringify(options.condition, undefined, 2)); let cursor = await collection.find(convertObjectId(mongoCondition) || {}); @@ -313,7 +318,9 @@ const driver = { if (options.skip) cursor = cursor.skip(options.skip); if (options.limit) cursor = cursor.limit(options.limit); const rows = await cursor.toArray(); - return { rows: rows.map(transformMongoData) }; + return { + rows: rows.map(transformMongoData), + }; } } catch (err) { return { errorMessage: err.message };