ipsambeatae
Version:
Shared dependencies of Compass, the MongoDB extension for VSCode and MongoSH
1,148 lines (1,138 loc) • 30.6 kB
text/typescript
import type { ENVS } from './env';
import { ATLAS, ADL, ON_PREM } from './env';
import {
ANY_NAMESPACE,
DATABASE,
ANY_COLLECTION_NAMESPACE,
COLLECTION,
} from './ns';
type StageOperator = {
readonly name: string;
readonly value: string;
readonly label: string;
readonly outputStage: boolean;
readonly fullScan: boolean;
readonly firstStage: boolean;
readonly score: number;
readonly env: readonly typeof ENVS[number][];
readonly meta: 'stage';
readonly version: `${number}.${number}.${number}`;
readonly apiVersions: readonly number[];
readonly namespaces: readonly typeof ANY_NAMESPACE[number][];
readonly description: string;
readonly comment: string;
readonly snippet: string;
};
/**
* The stage operators.
*/
const STAGE_OPERATORS = [
{
name: '$addFields',
value: '$addFields',
label: '$addFields',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Adds new field(s) to a document with a computed value, or reassigns an existing field(s) with a computed value.',
comment: `/**
* newField: The new field name.
* expression: The new field expression.
*/
`,
snippet: `{
\${1:newField}: \${2:expression}, \${3:...}
}`,
},
{
name: '$bucket',
value: '$bucket',
label: '$bucket',
outputStage: false,
fullScan: true,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Categorizes incoming documents into groups, called buckets, based on specified boundaries.',
comment: `/**
* groupBy: The expression to group by.
* boundaries: An array of the lower boundaries for each bucket.
* default: The bucket name for documents that do not fall within the specified boundaries
* output: {
* outputN: Optional. The output object may contain a single or numerous field names used to accumulate values per bucket.
* }
*/
`,
snippet: `{
groupBy: \${1:expression},
boundaries: [ \${2:lowerbound}, \${3:...} ],
default: \${4:literal},
output: {
\${5:outputN}: { \${6:accumulator} }, \${7:...}
}
}`,
},
{
name: '$bucketAuto',
value: '$bucketAuto',
label: '$bucketAuto',
outputStage: false,
fullScan: true,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Automatically categorizes documents into a specified number of buckets, attempting even distribution if possible.',
comment: `/**
* groupBy: The expression to group by.
* buckets: The desired number of buckets
* output: {
* outputN: Optional. The output object may contain a single or numerous field names used to accumulate values per bucket.
* }
* granularity: Optional number series
*/
`,
snippet: `{
groupBy: \${1:expression},
buckets: \${2:number},
output: {
\${3:outputN}: \${4:accumulator}, \${5:...}
},
granularity: '\${6:string}'
}`,
},
{
name: '$collStats',
value: '$collStats',
label: '$collStats',
outputStage: false,
fullScan: false,
firstStage: true,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [],
namespaces: [...ANY_COLLECTION_NAMESPACE],
description: 'Returns statistics regarding a collection or view.',
comment: `/**
* histograms: Optional latency histograms.
* storageStats: Optional storage stats.
*/
`,
snippet: `{
latencyStats: {
histograms: \${1:boolean}
},
storageStats: {\${2:}},
}`,
},
{
name: '$count',
value: '$count',
label: '$count',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Returns a count of the number of documents at this stage of the aggregation pipeline.',
comment: `/**
* Provide the field name for the count.
*/
`,
// eslint-disable-next-line quotes
snippet: `'\${1:string}'`,
},
{
name: '$densify',
value: '$densify',
label: '$densify',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '5.1.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Creates new documents to eliminate the gaps in the time or numeric domain at the required granularity level.',
comment: `/**
* field: The required field to densify.
* partitionByFields: The set of fields that acts as a compound key to define each partition.
* range: {
* step: The amount to increment the field value in each document.
* unit: If specified field must evaluate to a date for every document in the collection, otherwise must evaluate to a numeric.
* bounds: A string or array of numeric/date bounds, corresponding to the type of the field.
* }
*/
`,
snippet: `{
field: \${1:string},
partitionByFields: [\${2:string}, \${3:string}, ...],
range: {
step: \${4:number},
unit: \${5:string},
bounds: [\${6:lowerbound}, \${7:upperbound}, ...]
}
}`,
},
{
name: '$documents',
value: '$documents',
label: '$documents',
outputStage: false,
fullScan: false,
firstStage: true,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '4.4.9',
apiVersions: [1],
namespaces: [DATABASE],
description: 'Returns literal documents from input values.',
comment: `/**
* expression: Any valid expression.
*/
`,
snippet: `{
\${1:expression}
}`,
},
{
name: '$facet',
value: '$facet',
label: '$facet',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Allows for multiple parellel aggregations to be specified.',
comment: `/**
* outputFieldN: The first output field.
* stageN: The first aggregation stage.
*/
`,
snippet: `{
\${1:outputFieldN}: [ \${2:stageN}, \${3:...} ]
}`,
},
{
name: '$fill',
value: '$fill',
label: '$fill',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '5.3.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Populates null and missing field values within documents.',
comment: `/**
* sortBy: Syntax is the same as $sort, required if "method" is used in at least one output spec otherwise optional
* partitionBy: Optional, default is a single partition. Specification is the same as _id in $group (same as partitionBy in window functions).
* partitionByFields: Optional, set of fields that acts as a compound key to define each partition.
* output - Required, object for each field to fill in. For a single field, can be a single object.
* output.<field> - A field to be filled with value, if missing or null in the current document.
*/
`,
snippet: `{
sortBy: \${1:sortSpec},
partitionBy: \${2:expression},
partitionByFields: [\${3:string}, \${4:string}, ...],
output: {
field1: {value: \${5:expression}},
field2: {method: \${6:string}},
...
}
}`,
},
{
name: '$geoNear',
value: '$geoNear',
label: '$geoNear',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Returns documents based on proximity to a geospatial point.',
comment: `/**
* near: The point to search near.
* distanceField: The calculated distance.
* maxDistance: The maximum distance, in meters, documents can be before being excluded from results.
* query: Limits results that match the query
* includeLocs: Optional. Labels and includes the point used to match the document.
* num: Optional. The maximum number of documents to return.
* spherical: Defaults to false. Specifies whether to use spherical geometry.
*/
`,
snippet: `{
near: { type: 'Point', coordinates: [ \${1:number}, \${2:number} ] },
distanceField: '\${3:string}',
maxDistance: \${4:number},
query: {\${5}},
includeLocs: '\${6}',
num: \${7:number},
spherical: \${8:boolean}
}`,
},
{
name: '$graphLookup',
value: '$graphLookup',
label: '$graphLookup',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Performs a recursive search on a collection.',
comment: `/**
* from: The target collection.
* startWith: Expression to start.
* connectFromField: Field to connect.
* connectToField: Field to connect to.
* as: Name of the array field.
* maxDepth: Optional max recursion depth.
* depthField: Optional Name of the depth field.
* restrictSearchWithMatch: Optional query.
*/
`,
snippet: `{
from: '\${1:string}',
startWith: \${2:expression},
connectFromField: '\${3:string}',
connectToField: '\${4:string}',
as: '\${5:string}',
maxDepth: \${6:number},
depthField: '\${7:string}',
restrictSearchWithMatch: {\${8}}
}`,
},
{
name: '$group',
value: '$group',
label: '$group',
outputStage: false,
fullScan: true,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Groups documents by a specified expression.',
comment: `/**
* _id: The id of the group.
* fieldN: The first field name.
*/
`,
snippet: `{
_id: \${1:expression},
\${2:fieldN}: {
\${3:accumulatorN}: \${4:expressionN}
}
}`,
},
{
name: '$indexStats',
value: '$indexStats',
label: '$indexStats',
outputStage: false,
fullScan: false,
firstStage: true,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.2.0',
apiVersions: [],
namespaces: [...ANY_NAMESPACE],
description:
'Returns statistics regarding the use of each index for the collection.',
comment: `/**
* No parameters.
*/
`,
snippet: '{}',
},
{
name: '$limit',
value: '$limit',
label: '$limit',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Limits the number of documents that flow into subsequent stages.',
comment: `/**
* Provide the number of documents to limit.
*/
`,
snippet: '${1:number}',
},
{
name: '$lookup',
value: '$lookup',
label: '$lookup',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Performs a join between two collections.',
comment: `/**
* from: The target collection.
* localField: The local join field.
* foreignField: The target join field.
* as: The name for the results.
* pipeline: Optional pipeline to run on the foreign collection.
* let: Optional variables to use in the pipeline field stages.
*/
`,
snippet: `{
from: \${1:collection},
localField: \${2:field},
foreignField: \${3:field},
as: \${4:result}
}`,
},
{
name: '$match',
value: '$match',
label: '$match',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Filters the document stream to allow only matching documents to pass through to subsequent stages.',
comment: `/**
* query: The query in MQL.
*/
`,
snippet: `{
\${1:query}
}`,
},
{
name: '$merge',
value: '$merge',
label: '$merge',
outputStage: true,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ON_PREM],
meta: 'stage',
version: '4.1.11',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Merges the resulting documents into a collection, optionally overriding existing documents.',
comment: `/**
* into: The target collection.
* on: Fields to identify.
* let: Defined variables.
* whenMatched: Action for matching docs.
* whenNotMatched: Action for non-matching docs.
*/
`,
snippet: `{
into: '\${1:string}',
on: '\${2:string}',
let: '\${3:specification(s)}',
whenMatched: '\${4:string}',
whenNotMatched: '\${5:string}'
}`,
},
{
name: '$merge',
value: '$merge',
label: '$merge',
outputStage: true,
fullScan: false,
firstStage: false,
score: 1,
env: [ADL],
meta: 'stage',
version: '4.0.0', // always available in ADL
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Merges the resulting documents into a collection, optionally overriding existing documents.',
comment: `/**
* atlas: Location to write the documents from the aggregation pipeline.
* on: Fields to identify.
* let: Defined variables.
* whenMatched: Action for matching docs.
* whenNotMatched: Action for non-matching docs.
*/
`,
snippet: `{
into: {
atlas: {
clusterName: '\${1:atlasClusterName}',
db: '\${2:database}',
coll: '\${3:collection}',
projectId: '\${4:optionalAtlasProjectId}'
}
},
on: '\${5:identifier}',
let: { \${6:specification(s)} },
whenMatched: '\${7:string}',
whenNotMatched: '\${8:string}'
}`,
},
{
name: '$out',
value: '$out',
label: '$out',
outputStage: true,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Writes the result of a pipeline to a new or existing collection.',
comment: `/**
* Provide the name of the output collection.
*/
`,
// eslint-disable-next-line quotes
snippet: `'\${1:string}'`,
},
{
name: '$out',
value: '$out',
label: '$out',
outputStage: true,
fullScan: false,
firstStage: false,
score: 1,
env: [ADL],
meta: 'stage',
version: '4.0.0', // always available in ADL
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Writes the result of a pipeline to an Atlas cluster or S3 bucket.',
comment: `/**
* Use any one of the following:
* s3: Parameters to save the data to S3.
* atlas: Parameters to save the data to Atlas. Example:
* {
* atlas: {
* db: 'string',
* coll: 'string',
* projectId: 'string',
* clusterName: 'string'
* }
* }
*/
`,
snippet: `{
s3: {
bucket: '\${1:string}',
region: '\${2:string}',
filename: '\${3:string}',
format: {
name: '\${4:string}',
maxFileSize: '\${5:bytes}',
maxRowGroupSize: '\${6:string}',
columnCompression: '\${7:string}'
},
errorMode: '\${8:string}'
}
}`,
},
{
name: '$project',
value: '$project',
label: '$project',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Adds new field(s) to a document with a computed value, or reassigns an existing field(s) with a computed value. Unlike $addFields, $project can also remove fields.',
comment: `/**
* specifications: The fields to
* include or exclude.
*/
`,
snippet: `{
\${1:specification(s)}
}`,
},
{
name: '$redact',
value: '$redact',
label: '$redact',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.6.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Restricts the content for each document based on information stored in the documents themselves',
comment: `/**
* expression: Any valid expression that
* evaluates to $$DESCEND, $$PRUNE, or $$KEEP.
*/
`,
snippet: `{
\${1:expression}
}`,
},
{
name: '$replaceWith',
value: '$replaceWith',
label: '$replaceWith',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '4.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Replaces a document with the specified embedded document.',
comment: `/**
* replacementDocument: A document or string.
*/
`,
snippet: `{
newWith: \${1:replacementDocument}
}`,
},
{
name: '$replaceRoot',
value: '$replaceRoot',
label: '$replaceRoot',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Replaces a document with the specified embedded document.',
comment: `/**
* replacementDocument: A document or string.
*/
`,
snippet: `{
newRoot: \${1:replacementDocument}
}`,
},
{
name: '$sample',
value: '$sample',
label: '$sample',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.2.0',
apiVersions: [1],
namespaces: [...ANY_COLLECTION_NAMESPACE],
description:
'Randomly selects the specified number of documents from its input.',
comment: `/**
* size: The number of documents to sample.
*/
`,
snippet: `{
size: \${1:number}
}`,
},
{
name: '$search',
value: '$search',
label: '$search',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS],
meta: 'stage',
version: '4.1.11',
apiVersions: [],
namespaces: [COLLECTION],
description: 'Performs a full-text search on the specified field(s).',
comment: `/**
* index: The name of the Search index.
* text: Analyzed search, with required fields of query and path, the analyzed field(s) to search.
* compound: Combines ops.
* span: Find in text field regions.
* exists: Test for presence of a field.
* near: Find near number or date.
* range: Find in numeric or date range.
*/
`,
snippet: `{
index: '\${1:string}',
text: {
query: '\${2:string}',
path: '\${3:string}'
}
}`,
},
{
name: '$searchMeta',
value: '$searchMeta',
label: '$searchMeta',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS],
meta: 'stage',
version: '4.4.9',
apiVersions: [],
namespaces: [COLLECTION],
description:
'Performs a full-text search on the specified field(s) and gets back only the generated search meta data from a query.',
comment: `/**
* index: The name of the Search index.
* count: The count of the results.
* facet: {
* operator: Analyzed search, with required fields of query and path, can either be replaced with the name of a valid operator.
* facets: {
* stringFacet: Narrows search results based on unique string values, with required fields of type and path.
* numberFacet: Narrows search results by breaking them up into separate ranges of numbers, with required fields of type, path, and boundaries.
* dateFacet: Narrows search results by breaking them up into separate ranges of dates, with required fields of type, path, and boundaries.
* }
* }
*/
`,
snippet: `{
index: \${1:string},
facet: {
operator: {
text: {
query: \${2:string},
path: \${3:string}
}
},
facets: {
\${4:stringFacet}: {
type: \${5:string},
path: \${6:string},
numBuckets: \${7:integer}
},
numberFacet: {
type: 'number',
path: \${8:string},
boundaries: [\${9:lowerbound}, \${10:upperbound}, ...],
default: \${11:string}
}
}
}
}`,
},
{
name: '$set',
value: '$set',
label: '$set',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '4.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Adds new fields to documents. $set outputs documents that contain all existing fields from the input documents and newly added fields.',
comment: `/**
* field: The field name
* expression: The expression.
*/
`,
snippet: `{
\${1:field}: \${2:expression}
}`,
},
{
name: '$setWindowFields',
value: '$setWindowFields',
label: '$setWindowFields',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '5.0.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Capable of partitioning incoming data, and can apply one or more functions to defined windows within each partition.',
comment: `/**
* partitionBy: partitioning of data.
* sortBy: fields to sort by.
* output: {
* path: {
* function: The window function to compute over the given window.
* window: {
* documents: A number of documents before and after the current document.
* range: A range of possible values around the value in the current document's sortBy field.
* unit: Specifies the units for the window bounds.
* }
* }
* }
*/
`,
snippet: `{
partitionBy: \${1:expression},
sortBy: \${2:sortSpec},
output: {
\${3:path}: {
\${4:function}: \${5:functionArgs},
window: {
documents: [\${6:lowerbound}, \${7:upperbound}],
range: [\${8:lowerbound}, \${9:upperbound}],
unit: \${10:string}
}
},
\${11:path2}: ...
}
}`,
},
{
name: '$skip',
value: '$skip',
label: '$skip',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Skips a specified number of documents before advancing to the next stage.',
comment: `/**
* Provide the number of documents to skip.
*/
`,
snippet: '${1:number}',
},
{
name: '$sort',
value: '$sort',
label: '$sort',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Reorders the document stream by a specified sort key and direction.',
comment: `/**
* Provide any number of field/order pairs.
*/
`,
snippet: `{
\${1:field1}: \${2:sortOrder}
}`,
},
{
name: '$sortByCount',
value: '$sortByCount',
label: '$sortByCount',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Groups incoming documents based on the value of a specified expression, then computes the count of documents in each distinct group.',
comment: `/**
* expression: Grouping expression or string.
*/
`,
snippet: `{
\${1:expression}
}`,
},
{
name: '$unionWith',
value: '$unionWith',
label: '$unionWith',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '4.4.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Perform a union with a pipeline on another collection.',
comment: `/**
* coll: The collection name.
* pipeline: The pipeline on the other collection.
*/
`,
snippet: `{
coll: '\${1:coll}',
pipeline: [\${2:pipeline}]
}`,
},
{
name: '$unset',
value: '$unset',
label: '$unset',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '4.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description: 'Excludes fields from the result document.',
comment: `/**
* Provide the field name to exclude.
* To exclude multiple fields, pass the field names in an array.
*/
`,
// eslint-disable-next-line quotes
snippet: `'\${1:string}'`,
},
{
name: '$unwind',
value: '$unwind',
label: '$unwind',
outputStage: false,
fullScan: false,
firstStage: false,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '2.2.0',
apiVersions: [1],
namespaces: [...ANY_NAMESPACE],
description:
'Outputs a new document for each element in a specified array. ',
comment: `/**
* path: Path to the array field.
* includeArrayIndex: Optional name for index.
* preserveNullAndEmptyArrays: Optional
* toggle to unwind null and empty values.
*/
`,
snippet: `{
path: \${1:path},
includeArrayIndex: '\${2:string}',
preserveNullAndEmptyArrays: \${3:boolean}
}`,
},
{
name: '$changeStream',
value: '$changeStream',
label: '$changeStream',
outputStage: false,
fullScan: false,
firstStage: true,
score: 1,
env: [ATLAS, ON_PREM],
meta: 'stage',
version: '4.2.0',
apiVersions: [1],
namespaces: [DATABASE],
description: 'Returns a Change Stream cursor for the collection.',
comment: `/**
* allChangesForCluster: Optional boolean to include all changes in the cluster.
* fullDocument: Optional value to request a copy of full document when modified by update operations (Introduced in 6.0).
* fullDocumentBeforeChange: Value to configure whether to return a full document before the change or not.
* resumeAfter: Specifies a resume token as the logical starting point for the change stream. Cannot be used with startAfter or startAtOperationTime fields.
* showExpandedEvents: Specifies whether to include additional change events, such as such as DDL and index operations (Introduced in 6.0).
* startAfter: Specifies a resume token as the logical starting point for the change stream. Cannot be used with resumeAfter or startAtOperationTime fields.
* startAtOperationTime: Specifies a time as the logical starting point for the change stream. Cannot be used with resumeAfter or startAfter fields.
*/
`,
snippet: `{
allChangesForCluster: \${1:boolean},
fullDocument: '\${2:string}',
fullDocumentBeforeChange: '\${3:string}',
resumeAfter: \${4:resumeToken},
showExpandedEvents: \${5:boolean},
startAfter: \${6:resumeToken},
startAtOperationTime: \${7:time},
}`,
},
{
name: '$currentOp',
value: '$currentOp',
label: '$currentOp',
outputStage: false,
fullScan: false,
firstStage: true,
score: 1,
env: [ATLAS, ADL, ON_PREM],
meta: 'stage',
version: '3.6.0',
apiVersions: [1],
namespaces: [DATABASE],
description:
'Returns a cursor over information on active and/or dormant operations for the MongoDB deployment as well as inactive sessions that are holding locks as part of a transaction.',
comment: `/**
* allUsers: Optional boolean value to specify whether to return operations for all users or not.
* idleConnections: Optional boolean value to specify whether to return all operations including idle connections or not.
* idleCursors: Optional boolean value to specify whether to report on cursors that are idle or not.
* idleSessions: Optional boolean value to specify whether to report on dormant sessions or not.
* localOps: Optional boolean value to specify whether to report on operations running locally on targetted mongos or not.
* backtrace: Optional boolean value to specify whether callstack information is returned as part of the waitingForLatch output field.
*/
`,
snippet: `{
allUsers: \${1:false},
idleConnections: \${2:false},
idleCursors: \${3:false},
idleSessions: \${4:true},
localOps: \${5:false},
backtrace: \${6:false},
}`,
},
{
name: '$listLocalSessions',
value: '$listLocalSessions',
label: '$listLocalSessions',
outputStage: false,
fullScan: false,
firstStage: true,
score: 1,
env: [ATLAS, ON_PREM],
meta: 'stage',
version: '3.6.0',
apiVersions: [1],
namespaces: [DATABASE],
description:
'Lists the sessions cached in memory by the mongod or mongos instance.',
comment: `/**
* users: Optional list of users for which local sessions need to be returned.
* allUsers: Optional boolean value to specify whether to return local sessions for all users or not.
*/
`,
snippet: `{
allUsers: \${1:false},
users: [
{ user: '\${2:string}', db: '\${3:string}' }
]
}`,
},
] as const;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
(function assertStageOperatorsSceme(_operators: readonly StageOperator[]) {
// This will fail on compile time if stage operators are not matching the type
// scheme while allowing us to export their types as const allowing for a
// stricter type definitions in the user code
})(STAGE_OPERATORS);
/**
* The list of stage operator names.
*/
const STAGE_OPERATOR_NAMES = STAGE_OPERATORS.map((op) => op.name);
const OUT_STAGES = STAGE_OPERATORS.filter(
(stage) => stage.outputStage
) as Extract<typeof STAGE_OPERATORS[number], { outputStage: true }>[];
const FULL_SCAN_STAGES = STAGE_OPERATORS.filter(
(stage) => stage.fullScan
) as Extract<typeof STAGE_OPERATORS[number], { fullScan: true }>[];
const REQUIRED_AS_FIRST_STAGE = STAGE_OPERATORS.filter(
(stage) => stage.firstStage
) as Extract<typeof STAGE_OPERATORS[number], { firstStage: true }>[];
export {
STAGE_OPERATORS,
STAGE_OPERATOR_NAMES,
OUT_STAGES,
FULL_SCAN_STAGES,
REQUIRED_AS_FIRST_STAGE,
};