@warlock.js/cascade 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/commands/create-new-app/get-app-path.d.ts +2 -0
- package/cjs/commands/create-new-app/get-app-path.d.ts.map +1 -0
- package/cjs/commands/create-new-app/get-app-path.js +8 -0
- package/cjs/commands/create-new-app/get-app-path.js.map +1 -0
- package/cjs/commands/create-new-app/index.d.ts +2 -0
- package/cjs/commands/create-new-app/index.d.ts.map +1 -0
- package/cjs/commands/create-new-app/index.js +44 -0
- package/cjs/commands/create-new-app/index.js.map +1 -0
- package/cjs/commands/create-new-app/select-app-type.d.ts +2 -0
- package/cjs/commands/create-new-app/select-app-type.d.ts.map +1 -0
- package/cjs/commands/create-new-app/types.d.ts +9 -0
- package/cjs/commands/create-new-app/types.d.ts.map +1 -0
- package/cjs/commands/create-warlock-app/index.d.ts +3 -0
- package/cjs/commands/create-warlock-app/index.d.ts.map +1 -0
- package/cjs/commands/create-warlock-app/index.js +18 -0
- package/cjs/commands/create-warlock-app/index.js.map +1 -0
- package/cjs/helpers/app.d.ts +51 -0
- package/cjs/helpers/app.d.ts.map +1 -0
- package/cjs/helpers/app.js +127 -0
- package/cjs/helpers/app.js.map +1 -0
- package/cjs/helpers/exec.d.ts +10 -0
- package/cjs/helpers/exec.d.ts.map +1 -0
- package/cjs/helpers/exec.js +69 -0
- package/cjs/helpers/exec.js.map +1 -0
- package/cjs/helpers/package-manager.d.ts +6 -0
- package/cjs/helpers/package-manager.d.ts.map +1 -0
- package/cjs/helpers/package-manager.js +22 -0
- package/cjs/helpers/package-manager.js.map +1 -0
- package/cjs/helpers/paths.d.ts +4 -0
- package/cjs/helpers/paths.d.ts.map +1 -0
- package/cjs/helpers/paths.js +8 -0
- package/cjs/helpers/paths.js.map +1 -0
- package/cjs/helpers/project-builder-helpers.d.ts +7 -0
- package/cjs/helpers/project-builder-helpers.d.ts.map +1 -0
- package/cjs/helpers/project-builder-helpers.js +44 -0
- package/cjs/helpers/project-builder-helpers.js.map +1 -0
- package/cjs/index.d.ts +1 -12
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +5 -1
- package/cjs/index.js.map +1 -1
- package/esm/blueprint/blueprint.d.ts +2 -2
- package/esm/blueprint/blueprint.d.ts.map +1 -1
- package/esm/blueprint/blueprint.js +2 -0
- package/esm/blueprint/blueprint.js.map +1 -1
- package/esm/index.d.ts +0 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -1
- package/esm/migration/migrate.d.ts.map +1 -1
- package/esm/migration/migrate.js +2 -6
- package/esm/migration/migrate.js.map +1 -1
- package/esm/migration/migration-office.d.ts +3 -3
- package/esm/migration/migration-office.d.ts.map +1 -1
- package/esm/migration/migration-office.js +15 -1
- package/esm/migration/migration-office.js.map +1 -1
- package/esm/migration/types.d.ts +10 -0
- package/esm/migration/types.d.ts.map +1 -1
- package/esm/model/ModelAggregate.js +1 -1
- package/esm/model/ModelAggregate.js.map +1 -1
- package/esm/model/base-model.d.ts +2 -2
- package/esm/model/base-model.d.ts.map +1 -1
- package/esm/model/base-model.js +14 -4
- package/esm/model/base-model.js.map +1 -1
- package/esm/model/model.d.ts +13 -2
- package/esm/model/model.d.ts.map +1 -1
- package/esm/model/model.js +41 -3
- package/esm/model/model.js.map +1 -1
- package/esm/types.d.ts +30 -0
- package/esm/types.d.ts.map +1 -1
- package/esm/utils/deep-diff.d.ts +9 -0
- package/esm/utils/deep-diff.d.ts.map +1 -0
- package/esm/utils/deep-diff.js +42 -0
- package/esm/utils/deep-diff.js.map +1 -0
- package/package.json +2 -1
- package/cjs/aggregate/DeselectPipeline.d.ts +0 -10
- package/cjs/aggregate/DeselectPipeline.d.ts.map +0 -1
- package/cjs/aggregate/DeselectPipeline.js +0 -17
- package/cjs/aggregate/DeselectPipeline.js.map +0 -1
- package/cjs/aggregate/GeoNearPipeline.d.ts +0 -34
- package/cjs/aggregate/GeoNearPipeline.d.ts.map +0 -1
- package/cjs/aggregate/GeoNearPipeline.js +0 -44
- package/cjs/aggregate/GeoNearPipeline.js.map +0 -1
- package/cjs/aggregate/GroupByPipeline.d.ts +0 -12
- package/cjs/aggregate/GroupByPipeline.d.ts.map +0 -1
- package/cjs/aggregate/GroupByPipeline.js +0 -28
- package/cjs/aggregate/GroupByPipeline.js.map +0 -1
- package/cjs/aggregate/LimitPipeline.d.ts +0 -10
- package/cjs/aggregate/LimitPipeline.d.ts.map +0 -1
- package/cjs/aggregate/LimitPipeline.js +0 -14
- package/cjs/aggregate/LimitPipeline.js.map +0 -1
- package/cjs/aggregate/LookupPipeline.d.ts +0 -19
- package/cjs/aggregate/LookupPipeline.d.ts.map +0 -1
- package/cjs/aggregate/LookupPipeline.js +0 -19
- package/cjs/aggregate/LookupPipeline.js.map +0 -1
- package/cjs/aggregate/OrWherePipeline.d.ts +0 -23
- package/cjs/aggregate/OrWherePipeline.d.ts.map +0 -1
- package/cjs/aggregate/OrWherePipeline.js +0 -42
- package/cjs/aggregate/OrWherePipeline.js.map +0 -1
- package/cjs/aggregate/SelectPipeline.d.ts +0 -10
- package/cjs/aggregate/SelectPipeline.d.ts.map +0 -1
- package/cjs/aggregate/SelectPipeline.js +0 -26
- package/cjs/aggregate/SelectPipeline.js.map +0 -1
- package/cjs/aggregate/SkipPipeline.d.ts +0 -10
- package/cjs/aggregate/SkipPipeline.d.ts.map +0 -1
- package/cjs/aggregate/SkipPipeline.js +0 -14
- package/cjs/aggregate/SkipPipeline.js.map +0 -1
- package/cjs/aggregate/SortByPipeline.d.ts +0 -10
- package/cjs/aggregate/SortByPipeline.d.ts.map +0 -1
- package/cjs/aggregate/SortByPipeline.js +0 -18
- package/cjs/aggregate/SortByPipeline.js.map +0 -1
- package/cjs/aggregate/SortPipeline.d.ts +0 -11
- package/cjs/aggregate/SortPipeline.d.ts.map +0 -1
- package/cjs/aggregate/SortPipeline.js +0 -18
- package/cjs/aggregate/SortPipeline.js.map +0 -1
- package/cjs/aggregate/SortRandomPipeline.d.ts +0 -10
- package/cjs/aggregate/SortRandomPipeline.d.ts.map +0 -1
- package/cjs/aggregate/SortRandomPipeline.js +0 -16
- package/cjs/aggregate/SortRandomPipeline.js.map +0 -1
- package/cjs/aggregate/UnwindPipeline.d.ts +0 -14
- package/cjs/aggregate/UnwindPipeline.d.ts.map +0 -1
- package/cjs/aggregate/UnwindPipeline.js +0 -19
- package/cjs/aggregate/UnwindPipeline.js.map +0 -1
- package/cjs/aggregate/WhereExpression.d.ts +0 -17
- package/cjs/aggregate/WhereExpression.d.ts.map +0 -1
- package/cjs/aggregate/WhereExpression.js +0 -149
- package/cjs/aggregate/WhereExpression.js.map +0 -1
- package/cjs/aggregate/WhereExpressionPipeline.d.ts +0 -10
- package/cjs/aggregate/WhereExpressionPipeline.d.ts.map +0 -1
- package/cjs/aggregate/WhereExpressionPipeline.js +0 -15
- package/cjs/aggregate/WhereExpressionPipeline.js.map +0 -1
- package/cjs/aggregate/WherePipeline.d.ts +0 -13
- package/cjs/aggregate/WherePipeline.d.ts.map +0 -1
- package/cjs/aggregate/WherePipeline.js +0 -12
- package/cjs/aggregate/WherePipeline.js.map +0 -1
- package/cjs/aggregate/aggregate.d.ts +0 -358
- package/cjs/aggregate/aggregate.d.ts.map +0 -1
- package/cjs/aggregate/aggregate.js +0 -680
- package/cjs/aggregate/aggregate.js.map +0 -1
- package/cjs/aggregate/expressions.d.ts +0 -361
- package/cjs/aggregate/expressions.d.ts.map +0 -1
- package/cjs/aggregate/expressions.js +0 -536
- package/cjs/aggregate/expressions.js.map +0 -1
- package/cjs/aggregate/index.d.ts +0 -21
- package/cjs/aggregate/index.d.ts.map +0 -1
- package/cjs/aggregate/parsePipelines.d.ts +0 -5
- package/cjs/aggregate/parsePipelines.d.ts.map +0 -1
- package/cjs/aggregate/parsePipelines.js +0 -6
- package/cjs/aggregate/parsePipelines.js.map +0 -1
- package/cjs/aggregate/pipeline.d.ts +0 -31
- package/cjs/aggregate/pipeline.d.ts.map +0 -1
- package/cjs/aggregate/pipeline.js +0 -42
- package/cjs/aggregate/pipeline.js.map +0 -1
- package/cjs/aggregate/types.d.ts +0 -8
- package/cjs/aggregate/types.d.ts.map +0 -1
- package/cjs/aggregate/types.js +0 -31
- package/cjs/aggregate/types.js.map +0 -1
- package/cjs/blueprint/blueprint-column.d.ts +0 -82
- package/cjs/blueprint/blueprint-column.d.ts.map +0 -1
- package/cjs/blueprint/blueprint.d.ts +0 -162
- package/cjs/blueprint/blueprint.d.ts.map +0 -1
- package/cjs/blueprint/blueprint.js +0 -338
- package/cjs/blueprint/blueprint.js.map +0 -1
- package/cjs/blueprint/index.d.ts +0 -3
- package/cjs/blueprint/index.d.ts.map +0 -1
- package/cjs/blueprint/model-blueprint.d.ts +0 -15
- package/cjs/blueprint/model-blueprint.d.ts.map +0 -1
- package/cjs/blueprint/model-blueprint.js +0 -16
- package/cjs/blueprint/model-blueprint.js.map +0 -1
- package/cjs/casts/arrayOf.d.ts +0 -5
- package/cjs/casts/arrayOf.d.ts.map +0 -1
- package/cjs/casts/arrayOf.js +0 -18
- package/cjs/casts/arrayOf.js.map +0 -1
- package/cjs/casts/cast-email.d.ts +0 -2
- package/cjs/casts/cast-email.d.ts.map +0 -1
- package/cjs/casts/cast-email.js +0 -5
- package/cjs/casts/cast-email.js.map +0 -1
- package/cjs/casts/castModel.d.ts +0 -3
- package/cjs/casts/castModel.d.ts.map +0 -1
- package/cjs/casts/castModel.js +0 -49
- package/cjs/casts/castModel.js.map +0 -1
- package/cjs/casts/expiresAfter.d.ts +0 -3
- package/cjs/casts/expiresAfter.d.ts.map +0 -1
- package/cjs/casts/expiresAfter.js +0 -5
- package/cjs/casts/expiresAfter.js.map +0 -1
- package/cjs/casts/index.d.ts +0 -9
- package/cjs/casts/index.d.ts.map +0 -1
- package/cjs/casts/oneOf.d.ts +0 -3
- package/cjs/casts/oneOf.d.ts.map +0 -1
- package/cjs/casts/oneOf.js +0 -22
- package/cjs/casts/oneOf.js.map +0 -1
- package/cjs/casts/random-string.d.ts +0 -2
- package/cjs/casts/random-string.d.ts.map +0 -1
- package/cjs/casts/random-string.js +0 -5
- package/cjs/casts/random-string.js.map +0 -1
- package/cjs/casts/randomInteger.d.ts +0 -2
- package/cjs/casts/randomInteger.d.ts.map +0 -1
- package/cjs/casts/randomInteger.js +0 -7
- package/cjs/casts/randomInteger.js.map +0 -1
- package/cjs/casts/shapedArray.d.ts +0 -26
- package/cjs/casts/shapedArray.d.ts.map +0 -1
- package/cjs/casts/shapedArray.js +0 -100
- package/cjs/casts/shapedArray.js.map +0 -1
- package/cjs/config.d.ts +0 -4
- package/cjs/config.d.ts.map +0 -1
- package/cjs/config.js +0 -10
- package/cjs/config.js.map +0 -1
- package/cjs/connection.d.ts +0 -45
- package/cjs/connection.d.ts.map +0 -1
- package/cjs/connection.js +0 -98
- package/cjs/connection.js.map +0 -1
- package/cjs/console/db-indexes-command.d.ts +0 -3
- package/cjs/console/db-indexes-command.d.ts.map +0 -1
- package/cjs/console/db-indexes-command.js +0 -18
- package/cjs/console/db-indexes-command.js.map +0 -1
- package/cjs/console/index.d.ts +0 -4
- package/cjs/console/index.d.ts.map +0 -1
- package/cjs/console/migrate-command.d.ts +0 -2
- package/cjs/console/migrate-command.d.ts.map +0 -1
- package/cjs/console/migrate-command.js +0 -13
- package/cjs/console/migrate-command.js.map +0 -1
- package/cjs/console/register-blueprint-command.d.ts +0 -2
- package/cjs/console/register-blueprint-command.d.ts.map +0 -1
- package/cjs/console/register-blueprint-command.js +0 -19
- package/cjs/console/register-blueprint-command.js.map +0 -1
- package/cjs/database.d.ts +0 -49
- package/cjs/database.d.ts.map +0 -1
- package/cjs/database.js +0 -85
- package/cjs/database.js.map +0 -1
- package/cjs/migration/index.d.ts +0 -4
- package/cjs/migration/index.d.ts.map +0 -1
- package/cjs/migration/migrate.d.ts +0 -13
- package/cjs/migration/migrate.d.ts.map +0 -1
- package/cjs/migration/migrate.js +0 -76
- package/cjs/migration/migrate.js.map +0 -1
- package/cjs/migration/migration-office.d.ts +0 -21
- package/cjs/migration/migration-office.d.ts.map +0 -1
- package/cjs/migration/migration-office.js +0 -26
- package/cjs/migration/migration-office.js.map +0 -1
- package/cjs/migration/migration-officer.d.ts +0 -33
- package/cjs/migration/migration-officer.d.ts.map +0 -1
- package/cjs/migration/migration-officer.js +0 -55
- package/cjs/migration/migration-officer.js.map +0 -1
- package/cjs/migration/types.d.ts +0 -24
- package/cjs/migration/types.d.ts.map +0 -1
- package/cjs/model/ModelAggregate.d.ts +0 -84
- package/cjs/model/ModelAggregate.d.ts.map +0 -1
- package/cjs/model/ModelAggregate.js +0 -164
- package/cjs/model/ModelAggregate.js.map +0 -1
- package/cjs/model/ModelSync.d.ts +0 -74
- package/cjs/model/ModelSync.d.ts.map +0 -1
- package/cjs/model/ModelSync.js +0 -215
- package/cjs/model/ModelSync.js.map +0 -1
- package/cjs/model/RelationshipWithMany.d.ts +0 -24
- package/cjs/model/RelationshipWithMany.d.ts.map +0 -1
- package/cjs/model/RelationshipWithMany.js +0 -42
- package/cjs/model/RelationshipWithMany.js.map +0 -1
- package/cjs/model/base-model.d.ts +0 -155
- package/cjs/model/base-model.d.ts.map +0 -1
- package/cjs/model/base-model.js +0 -220
- package/cjs/model/base-model.js.map +0 -1
- package/cjs/model/crud-model.d.ts +0 -117
- package/cjs/model/crud-model.d.ts.map +0 -1
- package/cjs/model/crud-model.js +0 -352
- package/cjs/model/crud-model.js.map +0 -1
- package/cjs/model/index.d.ts +0 -10
- package/cjs/model/index.d.ts.map +0 -1
- package/cjs/model/joinable.d.ts +0 -87
- package/cjs/model/joinable.d.ts.map +0 -1
- package/cjs/model/joinable.js +0 -155
- package/cjs/model/joinable.js.map +0 -1
- package/cjs/model/master-mind.d.ts +0 -44
- package/cjs/model/master-mind.d.ts.map +0 -1
- package/cjs/model/master-mind.js +0 -129
- package/cjs/model/master-mind.js.map +0 -1
- package/cjs/model/model-events.d.ts +0 -57
- package/cjs/model/model-events.d.ts.map +0 -1
- package/cjs/model/model-events.js +0 -102
- package/cjs/model/model-events.js.map +0 -1
- package/cjs/model/model.d.ts +0 -390
- package/cjs/model/model.d.ts.map +0 -1
- package/cjs/model/model.js +0 -990
- package/cjs/model/model.js.map +0 -1
- package/cjs/model/relationships.d.ts +0 -69
- package/cjs/model/relationships.d.ts.map +0 -1
- package/cjs/model/relationships.js +0 -144
- package/cjs/model/relationships.js.map +0 -1
- package/cjs/model/types.d.ts +0 -113
- package/cjs/model/types.d.ts.map +0 -1
- package/cjs/model/types.js +0 -11
- package/cjs/model/types.js.map +0 -1
- package/cjs/query/index.d.ts +0 -2
- package/cjs/query/index.d.ts.map +0 -1
- package/cjs/query/query.d.ts +0 -228
- package/cjs/query/query.d.ts.map +0 -1
- package/cjs/query/query.js +0 -675
- package/cjs/query/query.js.map +0 -1
- package/cjs/query/types.d.ts +0 -56
- package/cjs/query/types.d.ts.map +0 -1
- package/cjs/types.d.ts +0 -32
- package/cjs/types.d.ts.map +0 -1
- package/cjs/utils/connectToDatabase.d.ts +0 -3
- package/cjs/utils/connectToDatabase.d.ts.map +0 -1
- package/cjs/utils/connectToDatabase.js +0 -3
- package/cjs/utils/connectToDatabase.js.map +0 -1
- package/cjs/utils/dropAllDatabaseIndexes.d.ts +0 -2
- package/cjs/utils/dropAllDatabaseIndexes.d.ts.map +0 -1
- package/cjs/utils/dropAllDatabaseIndexes.js +0 -10
- package/cjs/utils/dropAllDatabaseIndexes.js.map +0 -1
- package/cjs/utils/index.d.ts +0 -5
- package/cjs/utils/index.d.ts.map +0 -1
- package/cjs/utils/joinable-proxy.d.ts +0 -3
- package/cjs/utils/joinable-proxy.d.ts.map +0 -1
- package/cjs/utils/joinable-proxy.js +0 -14
- package/cjs/utils/joinable-proxy.js.map +0 -1
- package/cjs/utils/listDatabaseIndexes.d.ts +0 -4
- package/cjs/utils/listDatabaseIndexes.d.ts.map +0 -1
- package/cjs/utils/listDatabaseIndexes.js +0 -101
- package/cjs/utils/listDatabaseIndexes.js.map +0 -1
- package/cjs/utils/onceConnected.d.ts +0 -2
- package/cjs/utils/onceConnected.d.ts.map +0 -1
- package/cjs/utils/onceConnected.js +0 -8
- package/cjs/utils/onceConnected.js.map +0 -1
- package/esm/console/db-indexes-command.d.ts +0 -3
- package/esm/console/db-indexes-command.d.ts.map +0 -1
- package/esm/console/db-indexes-command.js +0 -18
- package/esm/console/db-indexes-command.js.map +0 -1
- package/esm/console/index.d.ts +0 -4
- package/esm/console/index.d.ts.map +0 -1
- package/esm/console/migrate-command.d.ts +0 -2
- package/esm/console/migrate-command.d.ts.map +0 -1
- package/esm/console/migrate-command.js +0 -13
- package/esm/console/migrate-command.js.map +0 -1
- package/esm/console/register-blueprint-command.d.ts +0 -2
- package/esm/console/register-blueprint-command.d.ts.map +0 -1
- package/esm/console/register-blueprint-command.js +0 -19
- package/esm/console/register-blueprint-command.js.map +0 -1
- package/esm/model/relationships.d.ts +0 -69
- package/esm/model/relationships.d.ts.map +0 -1
- package/esm/model/relationships.js +0 -144
- package/esm/model/relationships.js.map +0 -1
|
@@ -1,680 +0,0 @@
|
|
|
1
|
-
'use strict';var reinforcements=require('@mongez/reinforcements'),logger=require('@warlock.js/logger'),mongodb=require('mongodb'),modelEvents=require('../model/model-events.js'),query=require('../query/query.js'),DeselectPipeline=require('./DeselectPipeline.js'),GroupByPipeline=require('./GroupByPipeline.js'),LimitPipeline=require('./LimitPipeline.js'),LookupPipeline=require('./LookupPipeline.js'),OrWherePipeline=require('./OrWherePipeline.js'),SelectPipeline=require('./SelectPipeline.js'),SkipPipeline=require('./SkipPipeline.js'),SortByPipeline=require('./SortByPipeline.js'),SortPipeline=require('./SortPipeline.js'),SortRandomPipeline=require('./SortRandomPipeline.js'),UnwindPipeline=require('./UnwindPipeline.js'),WhereExpression=require('./WhereExpression.js'),WherePipeline=require('./WherePipeline.js'),expressions=require('./expressions.js'),parsePipelines=require('./parsePipelines.js');class Aggregate {
|
|
2
|
-
collection;
|
|
3
|
-
/**
|
|
4
|
-
* Collection pipelines
|
|
5
|
-
*/
|
|
6
|
-
pipelines = [];
|
|
7
|
-
/**
|
|
8
|
-
* Aggregate events
|
|
9
|
-
*/
|
|
10
|
-
static _events = new modelEvents.ModelEvents();
|
|
11
|
-
/**
|
|
12
|
-
* Query manager
|
|
13
|
-
*/
|
|
14
|
-
query = query.query;
|
|
15
|
-
/**
|
|
16
|
-
* Constructor
|
|
17
|
-
*/
|
|
18
|
-
constructor(collection) {
|
|
19
|
-
this.collection = collection;
|
|
20
|
-
// get the events instance
|
|
21
|
-
const events = Aggregate._events;
|
|
22
|
-
Aggregate._events.trigger("fetching", this);
|
|
23
|
-
events.collection = collection;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Get the events instance
|
|
27
|
-
*/
|
|
28
|
-
static events() {
|
|
29
|
-
return Aggregate._events;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Sort by the given column
|
|
33
|
-
*/
|
|
34
|
-
sort(column, direction = "asc") {
|
|
35
|
-
return this.pipeline(new SortPipeline.SortPipeline(column, direction));
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* @alias sort
|
|
39
|
-
*/
|
|
40
|
-
orderBy(column, direction = "asc") {
|
|
41
|
-
return this.sort(column, direction);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Order by descending
|
|
45
|
-
*/
|
|
46
|
-
sortByDesc(column) {
|
|
47
|
-
return this.sort(column, "desc");
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Order by descending
|
|
51
|
-
*/
|
|
52
|
-
orderByDesc(column) {
|
|
53
|
-
return this.sort(column, "desc");
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Sort by multiple columns
|
|
57
|
-
*/
|
|
58
|
-
sortBy(columns) {
|
|
59
|
-
return this.pipeline(new SortByPipeline.SortByPipeline(columns));
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Sort randomly
|
|
63
|
-
*/
|
|
64
|
-
random(limit) {
|
|
65
|
-
if (!limit) {
|
|
66
|
-
// get limit pipeline
|
|
67
|
-
const limitPipeline = this.pipelines.find(pipeline => pipeline.name === "limit");
|
|
68
|
-
if (limitPipeline) {
|
|
69
|
-
limit = limitPipeline.getData();
|
|
70
|
-
}
|
|
71
|
-
if (!limit) {
|
|
72
|
-
throw new Error("You must provide a limit when using random() or use limit() pipeline");
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// order by random in mongodb using $sample
|
|
76
|
-
return this.pipeline(new SortRandomPipeline.SortRandomPipeline(limit));
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Order by latest created records
|
|
80
|
-
*/
|
|
81
|
-
latest(column = "createdAt") {
|
|
82
|
-
return this.sort(column, "desc");
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Order by oldest created records
|
|
86
|
-
*/
|
|
87
|
-
oldest(column = "createdAt") {
|
|
88
|
-
return this.sort(column, "asc");
|
|
89
|
-
}
|
|
90
|
-
groupBy(...args) {
|
|
91
|
-
const [groupBy_id, groupByData] = args;
|
|
92
|
-
if (groupBy_id instanceof GroupByPipeline.GroupByPipeline) {
|
|
93
|
-
return this.pipeline(groupBy_id);
|
|
94
|
-
}
|
|
95
|
-
return this.pipeline(new GroupByPipeline.GroupByPipeline(groupBy_id, groupByData));
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Group by year
|
|
99
|
-
*/
|
|
100
|
-
groupByYear(column, groupByData) {
|
|
101
|
-
return this.groupBy({
|
|
102
|
-
year: expressions.year(expressions.$agg.columnName(column)),
|
|
103
|
-
}, groupByData);
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Group by month and year
|
|
107
|
-
*/
|
|
108
|
-
groupByMonthAndYear(column, groupByData) {
|
|
109
|
-
column = expressions.$agg.columnName(column);
|
|
110
|
-
return this.groupBy({
|
|
111
|
-
year: expressions.year(column),
|
|
112
|
-
month: expressions.month(column),
|
|
113
|
-
}, groupByData);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Group by month only
|
|
117
|
-
*/
|
|
118
|
-
groupByMonth(column, groupByData) {
|
|
119
|
-
column = expressions.$agg.columnName(column);
|
|
120
|
-
return this.groupBy({
|
|
121
|
-
month: expressions.month(column),
|
|
122
|
-
}, groupByData);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Group by day, month and year
|
|
126
|
-
*/
|
|
127
|
-
groupByDate(column, groupByData) {
|
|
128
|
-
column = expressions.$agg.columnName(column);
|
|
129
|
-
return this.groupBy({
|
|
130
|
-
year: expressions.year(column),
|
|
131
|
-
month: expressions.month(column),
|
|
132
|
-
day: expressions.dayOfMonth(column),
|
|
133
|
-
}, groupByData);
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Group by week and year
|
|
137
|
-
*/
|
|
138
|
-
groupByWeek(column, groupByData) {
|
|
139
|
-
column = expressions.$agg.columnName(column);
|
|
140
|
-
return this.groupBy({
|
|
141
|
-
year: expressions.year(column),
|
|
142
|
-
week: expressions.week(column),
|
|
143
|
-
}, groupByData);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Group by day only
|
|
147
|
-
*/
|
|
148
|
-
groupByDayOfMonth(column, groupByData) {
|
|
149
|
-
column = expressions.$agg.columnName(column);
|
|
150
|
-
return this.groupBy({
|
|
151
|
-
day: expressions.dayOfMonth(column),
|
|
152
|
-
}, groupByData);
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Pluck only the given column
|
|
156
|
-
*/
|
|
157
|
-
async pluck(column) {
|
|
158
|
-
return await this.select([column]).get(record => reinforcements.get(record, column));
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Get average of the given column
|
|
162
|
-
*/
|
|
163
|
-
async avg(column) {
|
|
164
|
-
const document = await this.groupBy(null, {
|
|
165
|
-
avg: expressions.$agg.avg(column),
|
|
166
|
-
}).first(document => document);
|
|
167
|
-
return document?.avg || 0;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* {@alias} avg
|
|
171
|
-
*/
|
|
172
|
-
average(column) {
|
|
173
|
-
return this.avg(column);
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Sum values of the given column
|
|
177
|
-
*/
|
|
178
|
-
async sum(column) {
|
|
179
|
-
const document = await this.groupBy(null, {
|
|
180
|
-
sum: expressions.$agg.sum(column),
|
|
181
|
-
}).first(document => document);
|
|
182
|
-
return document?.sum || 0;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Get minimum value of the given column
|
|
186
|
-
*/
|
|
187
|
-
async min(column) {
|
|
188
|
-
const document = await this.groupBy(null, {
|
|
189
|
-
min: expressions.$agg.min(column),
|
|
190
|
-
}).first(document => document);
|
|
191
|
-
return document?.min || 0;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Get maximum value of the given column
|
|
195
|
-
*/
|
|
196
|
-
async max(column) {
|
|
197
|
-
const document = await this.groupBy(null, {
|
|
198
|
-
max: expressions.$agg.max(column),
|
|
199
|
-
}).first(document => document);
|
|
200
|
-
return document?.max || 0;
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Get distinct value for the given column using aggregation
|
|
204
|
-
*/
|
|
205
|
-
async distinct(column) {
|
|
206
|
-
return (await this.groupBy(null, {
|
|
207
|
-
// use addToSet to get unique values
|
|
208
|
-
[column]: expressions.$agg.addToSet(column),
|
|
209
|
-
})
|
|
210
|
-
.select([column])
|
|
211
|
-
.get(data => data[column]));
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* {@alias} distinct
|
|
215
|
-
*/
|
|
216
|
-
unique(column) {
|
|
217
|
-
return this.distinct(column);
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Get distinct values that are not empty
|
|
221
|
-
*/
|
|
222
|
-
async distinctHeavy(column) {
|
|
223
|
-
return await this.whereNotNull(column).distinct(column);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* {@alias} distinctHeavy
|
|
227
|
-
*/
|
|
228
|
-
async uniqueHeavy(column) {
|
|
229
|
-
return await this.distinctHeavy(column);
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Get values list of the given column
|
|
233
|
-
*/
|
|
234
|
-
async values(column) {
|
|
235
|
-
return (await this.groupBy(null, {
|
|
236
|
-
values: expressions.$agg.push(column),
|
|
237
|
-
})
|
|
238
|
-
.select(["values"])
|
|
239
|
-
.get(data => data.values));
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Limit the number of results
|
|
243
|
-
*/
|
|
244
|
-
limit(limit) {
|
|
245
|
-
return this.pipeline(new LimitPipeline.LimitPipeline(limit));
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Skip the given number of results
|
|
249
|
-
*/
|
|
250
|
-
skip(skip) {
|
|
251
|
-
return this.pipeline(new SkipPipeline.SkipPipeline(skip));
|
|
252
|
-
}
|
|
253
|
-
select(...columns) {
|
|
254
|
-
if (columns.length === 1 && Array.isArray(columns[0])) {
|
|
255
|
-
columns = columns[0];
|
|
256
|
-
}
|
|
257
|
-
return this.pipeline(new SelectPipeline.SelectPipeline(columns));
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Deselect the given columns
|
|
261
|
-
*/
|
|
262
|
-
deselect(columns) {
|
|
263
|
-
return this.pipeline(new DeselectPipeline.DeselectPipeline(columns));
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Unwind/Extract the given column
|
|
267
|
-
*/
|
|
268
|
-
unwind(column, options) {
|
|
269
|
-
return this.pipeline(new UnwindPipeline.UnwindPipeline(column, options));
|
|
270
|
-
}
|
|
271
|
-
where(...args) {
|
|
272
|
-
return this.pipeline(new WherePipeline.WherePipeline(WhereExpression.WhereExpression.parse.apply(null, args)));
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Add comparison between two or more columns
|
|
276
|
-
*/
|
|
277
|
-
whereColumns(column1, operator, ...otherColumns) {
|
|
278
|
-
const mongoOperator = WhereExpression.toOperator(operator) || operator;
|
|
279
|
-
return this.where(expressions.$agg.expr({
|
|
280
|
-
[mongoOperator]: [
|
|
281
|
-
expressions.$agg.columnName(column1),
|
|
282
|
-
...otherColumns.map(column => expressions.$agg.columnName(column)),
|
|
283
|
-
],
|
|
284
|
-
}));
|
|
285
|
-
}
|
|
286
|
-
orWhere(column) {
|
|
287
|
-
return this.pipeline(new OrWherePipeline.OrWherePipeline(column));
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Perform a text search
|
|
291
|
-
* Please note that this method will add the `match` stage to the beginning of the pipeline
|
|
292
|
-
* Also it will add `score` field to the result automatically
|
|
293
|
-
*
|
|
294
|
-
* @warning This method will not work if the collection is not indexed for text search
|
|
295
|
-
*/
|
|
296
|
-
textSearch(query, moreFilters) {
|
|
297
|
-
this.pipelines.unshift({
|
|
298
|
-
$match: {
|
|
299
|
-
$text: { $search: query },
|
|
300
|
-
...moreFilters,
|
|
301
|
-
},
|
|
302
|
-
});
|
|
303
|
-
this.addField("score", { $meta: "textScore" });
|
|
304
|
-
return this;
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Where null
|
|
308
|
-
*/
|
|
309
|
-
whereNull(column) {
|
|
310
|
-
return this.where(column, null);
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Where not null
|
|
314
|
-
*/
|
|
315
|
-
whereNotNull(column) {
|
|
316
|
-
return this.where(column, "!=", null);
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Where like operator
|
|
320
|
-
*/
|
|
321
|
-
whereLike(column, value) {
|
|
322
|
-
return this.where(column, "like", value);
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Where not like operator
|
|
326
|
-
*/
|
|
327
|
-
whereNotLike(column, value) {
|
|
328
|
-
return this.where(column, "notLike", value);
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Where column starts with the given value
|
|
332
|
-
*/
|
|
333
|
-
whereStartsWith(column, value) {
|
|
334
|
-
return this.where(column, "startsWith", value);
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Where column not starts with the given value
|
|
338
|
-
*/
|
|
339
|
-
whereNotStartsWith(column, value) {
|
|
340
|
-
return this.where(column, "notStartsWith", value);
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Where column ends with the given value
|
|
344
|
-
*/
|
|
345
|
-
whereEndsWith(column, value) {
|
|
346
|
-
return this.where(column, "endsWith", value);
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Where column not ends with the given value
|
|
350
|
-
*/
|
|
351
|
-
whereNotEndsWith(column, value) {
|
|
352
|
-
return this.where(column, "notEndsWith", value);
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Where between operator
|
|
356
|
-
*/
|
|
357
|
-
whereBetween(column, value) {
|
|
358
|
-
return this.where(column, "between", value);
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* Where date between operator
|
|
362
|
-
*/
|
|
363
|
-
whereDateBetween(column, value) {
|
|
364
|
-
return this.where(column, "between", value);
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* Where date not between operator
|
|
368
|
-
*/
|
|
369
|
-
whereDateNotBetween(column, value) {
|
|
370
|
-
return this.where(column, "notBetween", value);
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Where not between operator
|
|
374
|
-
*/
|
|
375
|
-
whereNotBetween(column, value) {
|
|
376
|
-
return this.where(column, "notBetween", value);
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Where exists operator
|
|
380
|
-
*/
|
|
381
|
-
whereExists(column) {
|
|
382
|
-
return this.where(column, "exists", true);
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* Where not exists operator
|
|
386
|
-
*/
|
|
387
|
-
whereNotExists(column) {
|
|
388
|
-
return this.where(column, "exists", false);
|
|
389
|
-
}
|
|
390
|
-
whereSize(...args) {
|
|
391
|
-
// first we need to project the column to get the size
|
|
392
|
-
const [column, operator, columnSize] = args;
|
|
393
|
-
this.project({
|
|
394
|
-
[column + "_size"]: {
|
|
395
|
-
$size: expressions.$agg.columnName(column),
|
|
396
|
-
},
|
|
397
|
-
});
|
|
398
|
-
// then we can use the size operator
|
|
399
|
-
this.where(column + "_size", operator, columnSize);
|
|
400
|
-
// now we need to deselect the column size
|
|
401
|
-
// this.project({
|
|
402
|
-
// [column + "_size"]: 0,
|
|
403
|
-
// });
|
|
404
|
-
return this;
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Add project pipeline
|
|
408
|
-
*
|
|
409
|
-
*/
|
|
410
|
-
project(data) {
|
|
411
|
-
return this.addPipeline({
|
|
412
|
-
$project: data,
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Where in operator
|
|
417
|
-
* If value is a string, it will be treated as a column name
|
|
418
|
-
*/
|
|
419
|
-
whereIn(column, values) {
|
|
420
|
-
return this.where(column, "in", values);
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Where not in operator
|
|
424
|
-
* If value is a string, it will be treated as a column name
|
|
425
|
-
*/
|
|
426
|
-
whereNotIn(column, values) {
|
|
427
|
-
return this.where(column, "notIn", values);
|
|
428
|
-
}
|
|
429
|
-
/**
|
|
430
|
-
* // TODO: Make a proper implementation
|
|
431
|
-
* Where location near
|
|
432
|
-
*/
|
|
433
|
-
whereNear(column, value, _distance) {
|
|
434
|
-
return this.where(column, "near", value);
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* // TODO: Make a proper implementation
|
|
438
|
-
* Get nearby location between the given min and max distance
|
|
439
|
-
*/
|
|
440
|
-
async whereNearByIn(column, value, _minDistance, _maxDistance) {
|
|
441
|
-
return this.where(column, value);
|
|
442
|
-
}
|
|
443
|
-
/**
|
|
444
|
-
* Lookup the given collection
|
|
445
|
-
*/
|
|
446
|
-
lookup(options) {
|
|
447
|
-
this.pipeline(new LookupPipeline.LookupPipeline(options));
|
|
448
|
-
if (options.single && options.as) {
|
|
449
|
-
const as = options.as;
|
|
450
|
-
this.addField(as, expressions.last(as));
|
|
451
|
-
}
|
|
452
|
-
return this;
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Add field to the pipeline
|
|
456
|
-
*/
|
|
457
|
-
addField(field, value) {
|
|
458
|
-
return this.addPipeline({
|
|
459
|
-
$addFields: {
|
|
460
|
-
[field]: value,
|
|
461
|
-
},
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
/**
|
|
465
|
-
* Add fields to the pipeline
|
|
466
|
-
*/
|
|
467
|
-
addFields(fields) {
|
|
468
|
-
return this.addPipeline({
|
|
469
|
-
$addFields: fields,
|
|
470
|
-
});
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* Get new pipeline instance
|
|
474
|
-
*/
|
|
475
|
-
pipeline(...pipelines) {
|
|
476
|
-
this.pipelines.push(...pipelines);
|
|
477
|
-
return this;
|
|
478
|
-
}
|
|
479
|
-
/**
|
|
480
|
-
* Unshift pipeline to the beginning of the pipelines
|
|
481
|
-
*/
|
|
482
|
-
unshiftPipelines(pipelines) {
|
|
483
|
-
this.pipelines.unshift(...pipelines);
|
|
484
|
-
return this;
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* Add mongodb plain stage
|
|
488
|
-
*/
|
|
489
|
-
addPipeline(pipeline) {
|
|
490
|
-
this.pipelines.push(pipeline);
|
|
491
|
-
return this;
|
|
492
|
-
}
|
|
493
|
-
/**
|
|
494
|
-
* Add mongodb plain stages
|
|
495
|
-
*/
|
|
496
|
-
addPipelines(pipelines) {
|
|
497
|
-
this.pipelines.push(...pipelines);
|
|
498
|
-
return this;
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* Get pipelines
|
|
502
|
-
*/
|
|
503
|
-
getPipelines() {
|
|
504
|
-
return this.pipelines;
|
|
505
|
-
}
|
|
506
|
-
/**
|
|
507
|
-
* Get only first result
|
|
508
|
-
*/
|
|
509
|
-
async first(mapData) {
|
|
510
|
-
const results = await this.limit(1).get(mapData);
|
|
511
|
-
return results[0];
|
|
512
|
-
}
|
|
513
|
-
/**
|
|
514
|
-
* Get last result
|
|
515
|
-
*/
|
|
516
|
-
async last(filters) {
|
|
517
|
-
if (filters) {
|
|
518
|
-
this.where(filters);
|
|
519
|
-
}
|
|
520
|
-
const results = await this.orderByDesc("id").limit(1).get();
|
|
521
|
-
return results[0];
|
|
522
|
-
}
|
|
523
|
-
/**
|
|
524
|
-
* Delete records
|
|
525
|
-
*/
|
|
526
|
-
async delete() {
|
|
527
|
-
const ids = await (await this.select(["_id"]).pluck("_id")).map(_id => new mongodb.ObjectId(_id));
|
|
528
|
-
Aggregate._events.trigger("deleting", this);
|
|
529
|
-
return await query.query.delete(this.collection, {
|
|
530
|
-
_id: ids,
|
|
531
|
-
});
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* Get the data
|
|
535
|
-
*/
|
|
536
|
-
async get(mapData) {
|
|
537
|
-
const records = await this.execute();
|
|
538
|
-
return mapData ? records.map(mapData) : records;
|
|
539
|
-
}
|
|
540
|
-
/**
|
|
541
|
-
* Chunk documents based on the given limit
|
|
542
|
-
*/
|
|
543
|
-
async chunk(limit, callback, mapData) {
|
|
544
|
-
const totalDocuments = await this.clone().count();
|
|
545
|
-
const totalPages = Math.ceil(totalDocuments / limit);
|
|
546
|
-
for (let page = 1; page <= totalPages; page++) {
|
|
547
|
-
const results = await this.clone().paginate(page, limit, mapData);
|
|
548
|
-
const { documents, paginationInfo } = results;
|
|
549
|
-
const output = await callback(documents, paginationInfo);
|
|
550
|
-
if (output === false)
|
|
551
|
-
break;
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
/**
|
|
555
|
-
* Paginate records based on the given filter
|
|
556
|
-
*/
|
|
557
|
-
async paginate(page = 1, limit = 15, mapData) {
|
|
558
|
-
const totalDocumentsQuery = this.parse();
|
|
559
|
-
this.skip((page - 1) * limit).limit(limit);
|
|
560
|
-
const records = await this.get(mapData);
|
|
561
|
-
this.pipelines = totalDocumentsQuery;
|
|
562
|
-
const totalDocuments = await this.count();
|
|
563
|
-
const result = {
|
|
564
|
-
documents: records,
|
|
565
|
-
paginationInfo: {
|
|
566
|
-
limit,
|
|
567
|
-
page,
|
|
568
|
-
result: records.length,
|
|
569
|
-
total: totalDocuments,
|
|
570
|
-
pages: Math.ceil(totalDocuments / limit),
|
|
571
|
-
},
|
|
572
|
-
};
|
|
573
|
-
return result;
|
|
574
|
-
}
|
|
575
|
-
/**
|
|
576
|
-
* Explain the query
|
|
577
|
-
*/
|
|
578
|
-
async explain() {
|
|
579
|
-
return (await this.query.aggregate(this.collection, this.parse(), {
|
|
580
|
-
explain: true,
|
|
581
|
-
})).explain();
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Update the given data
|
|
585
|
-
*/
|
|
586
|
-
async update(data) {
|
|
587
|
-
try {
|
|
588
|
-
const query = [];
|
|
589
|
-
const filters = {};
|
|
590
|
-
this.parse().forEach(pipeline => {
|
|
591
|
-
if (pipeline.$match) {
|
|
592
|
-
Object.assign(filters, pipeline.$match);
|
|
593
|
-
}
|
|
594
|
-
else {
|
|
595
|
-
query.push(pipeline);
|
|
596
|
-
}
|
|
597
|
-
});
|
|
598
|
-
Aggregate._events.trigger("updating", this);
|
|
599
|
-
const results = await this.query.updateMany(this.collection, filters, [
|
|
600
|
-
...query,
|
|
601
|
-
{
|
|
602
|
-
$set: WhereExpression.parseValuesInObject(data),
|
|
603
|
-
},
|
|
604
|
-
]);
|
|
605
|
-
return results.modifiedCount;
|
|
606
|
-
}
|
|
607
|
-
catch (error) {
|
|
608
|
-
logger.log.error("database", "aggregate.update", error);
|
|
609
|
-
throw error;
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
/**
|
|
613
|
-
* Unset the given columns
|
|
614
|
-
*/
|
|
615
|
-
async unset(...columns) {
|
|
616
|
-
try {
|
|
617
|
-
const query = [];
|
|
618
|
-
const filters = {};
|
|
619
|
-
this.parse().forEach(pipeline => {
|
|
620
|
-
if (pipeline.$match) {
|
|
621
|
-
Object.assign(filters, pipeline.$match);
|
|
622
|
-
}
|
|
623
|
-
else {
|
|
624
|
-
query.push(pipeline);
|
|
625
|
-
}
|
|
626
|
-
});
|
|
627
|
-
Aggregate._events.trigger("updating", this);
|
|
628
|
-
const results = await this.query.updateMany(this.collection, filters, [
|
|
629
|
-
...query,
|
|
630
|
-
{
|
|
631
|
-
$unset: columns,
|
|
632
|
-
},
|
|
633
|
-
]);
|
|
634
|
-
return results.modifiedCount;
|
|
635
|
-
}
|
|
636
|
-
catch (error) {
|
|
637
|
-
logger.log.error("database", "aggregate.unset", error);
|
|
638
|
-
console.log(error);
|
|
639
|
-
throw error;
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
/**
|
|
643
|
-
* Execute the query
|
|
644
|
-
*/
|
|
645
|
-
async execute() {
|
|
646
|
-
const results = (await this.query.aggregate(this.collection, this.parse())).toArray();
|
|
647
|
-
return results;
|
|
648
|
-
}
|
|
649
|
-
/**
|
|
650
|
-
* Count the results
|
|
651
|
-
*/
|
|
652
|
-
async count() {
|
|
653
|
-
this.groupBy(null, {
|
|
654
|
-
total: expressions.count(),
|
|
655
|
-
});
|
|
656
|
-
const results = await this.execute();
|
|
657
|
-
return reinforcements.get(results, "0.total", 0);
|
|
658
|
-
}
|
|
659
|
-
/**
|
|
660
|
-
* Parse pipelines
|
|
661
|
-
*/
|
|
662
|
-
parse() {
|
|
663
|
-
return parsePipelines.parsePipelines(this.pipelines);
|
|
664
|
-
}
|
|
665
|
-
/**
|
|
666
|
-
* Reset the pipeline
|
|
667
|
-
*/
|
|
668
|
-
reset() {
|
|
669
|
-
this.pipelines = [];
|
|
670
|
-
return this;
|
|
671
|
-
}
|
|
672
|
-
/**
|
|
673
|
-
* Clone the aggregate class
|
|
674
|
-
*/
|
|
675
|
-
clone() {
|
|
676
|
-
const aggregate = new this.constructor(this.collection);
|
|
677
|
-
aggregate.pipelines = this.pipelines.slice();
|
|
678
|
-
return aggregate;
|
|
679
|
-
}
|
|
680
|
-
}exports.Aggregate=Aggregate;//# sourceMappingURL=aggregate.js.map
|