diff --git a/src/change_stream.ts b/src/change_stream.ts index 1526ca3c756..7f7551f2d82 100644 --- a/src/change_stream.ts +++ b/src/change_stream.ts @@ -419,6 +419,13 @@ export interface ChangeStreamCreateDocument ChangeStreamDocumentCollectionUUID { /** Describes the type of operation represented in this change notification */ operationType: 'create'; + + /** + * The type of the newly created object. + * + * @sinceServerVersion 8.1.0 + */ + nsType?: 'collection' | 'timeseries' | 'view'; } /** diff --git a/test/spec/change-streams/unified/change-streams-nsType.json b/test/spec/change-streams/unified/change-streams-nsType.json new file mode 100644 index 00000000000..1861c9a5e0a --- /dev/null +++ b/test/spec/change-streams/unified/change-streams-nsType.json @@ -0,0 +1,145 @@ +{ + "description": "change-streams-nsType", + "schemaVersion": "1.7", + "runOnRequirements": [ + { + "minServerVersion": "8.1.0", + "topologies": [ + "replicaset", + "sharded" + ], + "serverless": "forbid" + } + ], + "createEntities": [ + { + "client": { + "id": "client0", + "useMultipleMongoses": false + } + }, + { + "database": { + "id": "database0", + "client": "client0", + "databaseName": "database0" + } + } + ], + "tests": [ + { + "description": "nsType is present when creating collections", + "operations": [ + { + "name": "dropCollection", + "object": "database0", + "arguments": { + "collection": "foo" + } + }, + { + "name": "createChangeStream", + "object": "database0", + "arguments": { + "pipeline": [], + "showExpandedEvents": true + }, + "saveResultAsEntity": "changeStream0" + }, + { + "name": "createCollection", + "object": "database0", + "arguments": { + "collection": "foo" + } + }, + { + "name": "iterateUntilDocumentOrError", + "object": "changeStream0", + "expectResult": { + "operationType": "create", + "nsType": "collection" + } + } + ] + }, + { + "description": "nsType is present when creating timeseries", + "operations": [ + { + "name": "dropCollection", + "object": "database0", + "arguments": { + "collection": "foo" + } + }, + { + "name": "createChangeStream", + "object": "database0", + "arguments": { + "pipeline": [], + "showExpandedEvents": true + }, + "saveResultAsEntity": "changeStream0" + }, + { + "name": "createCollection", + "object": "database0", + "arguments": { + "collection": "foo", + "timeseries": { + "timeField": "time", + "metaField": "meta", + "granularity": "minutes" + } + } + }, + { + "name": "iterateUntilDocumentOrError", + "object": "changeStream0", + "expectResult": { + "operationType": "create", + "nsType": "timeseries" + } + } + ] + }, + { + "description": "nsType is present when creating views", + "operations": [ + { + "name": "dropCollection", + "object": "database0", + "arguments": { + "collection": "foo" + } + }, + { + "name": "createChangeStream", + "object": "database0", + "arguments": { + "pipeline": [], + "showExpandedEvents": true + }, + "saveResultAsEntity": "changeStream0" + }, + { + "name": "createCollection", + "object": "database0", + "arguments": { + "collection": "foo", + "viewOn": "testName" + } + }, + { + "name": "iterateUntilDocumentOrError", + "object": "changeStream0", + "expectResult": { + "operationType": "create", + "nsType": "view" + } + } + ] + } + ] +} diff --git a/test/spec/change-streams/unified/change-streams-nsType.yml b/test/spec/change-streams/unified/change-streams-nsType.yml new file mode 100644 index 00000000000..9885c4aaf68 --- /dev/null +++ b/test/spec/change-streams/unified/change-streams-nsType.yml @@ -0,0 +1,86 @@ +description: "change-streams-nsType" +schemaVersion: "1.7" +runOnRequirements: + - minServerVersion: "8.1.0" + topologies: [ replicaset, sharded ] + serverless: forbid +createEntities: + - client: + id: &client0 client0 + useMultipleMongoses: false + - database: + id: &database0 database0 + client: *client0 + databaseName: *database0 + +tests: + - description: "nsType is present when creating collections" + operations: + - name: dropCollection + object: *database0 + arguments: + collection: &collection0 foo + - name: createChangeStream + object: *database0 + arguments: + pipeline: [] + showExpandedEvents: true + saveResultAsEntity: &changeStream0 changeStream0 + - name: createCollection + object: *database0 + arguments: + collection: *collection0 + - name: iterateUntilDocumentOrError + object: *changeStream0 + expectResult: + operationType: create + nsType: collection + + - description: "nsType is present when creating timeseries" + operations: + - name: dropCollection + object: *database0 + arguments: + collection: &collection0 foo + - name: createChangeStream + object: *database0 + arguments: + pipeline: [] + showExpandedEvents: true + saveResultAsEntity: &changeStream0 changeStream0 + - name: createCollection + object: *database0 + arguments: + collection: *collection0 + timeseries: + timeField: "time" + metaField: "meta" + granularity: "minutes" + - name: iterateUntilDocumentOrError + object: *changeStream0 + expectResult: + operationType: create + nsType: timeseries + + - description: "nsType is present when creating views" + operations: + - name: dropCollection + object: *database0 + arguments: + collection: &collection0 foo + - name: createChangeStream + object: *database0 + arguments: + pipeline: [] + showExpandedEvents: true + saveResultAsEntity: &changeStream0 changeStream0 + - name: createCollection + object: *database0 + arguments: + collection: *collection0 + viewOn: testName + - name: iterateUntilDocumentOrError + object: *changeStream0 + expectResult: + operationType: create + nsType: view \ No newline at end of file