bson/testdata/crud/unified/aggregate-let.yml
2025-03-17 20:58:26 +01:00

139 lines
4.1 KiB
YAML

description: "aggregate-let"
schemaVersion: "1.4"
createEntities:
- client:
id: &client0 client0
observeEvents: [ commandStartedEvent ]
- database:
id: &database0 database0
client: *client0
databaseName: &database0Name crud-tests
- collection:
id: &collection0 collection0
database: *database0
collectionName: &collection0Name coll0
- collection:
id: &collection1 collection1
database: *database0
collectionName: &collection1Name coll1
initialData: &initialData
- collectionName: *collection0Name
databaseName: *database0Name
documents:
- { _id: 1 }
- collectionName: *collection1Name
databaseName: *database0Name
documents: [ ]
tests:
- description: "Aggregate with let option"
runOnRequirements:
- minServerVersion: "5.0"
operations:
- name: aggregate
object: *collection0
arguments:
pipeline: &pipeline0
# $match takes a query expression, so $expr is necessary to utilize
# an aggregate expression context and access "let" variables.
- $match: { $expr: { $eq: ["$_id", "$$id"] } }
- $project: { _id: 0, x: "$$x", y: "$$y", rand: "$$rand" }
# Values in "let" must be constant or closed expressions that do not
# depend on document values. This test demonstrates a basic constant
# value, a value wrapped with $literal (to avoid expression parsing),
# and a closed expression (e.g. $rand).
let: &let0
id: 1
x: foo
y: { $literal: "$bar" }
rand: { $rand: {} }
expectResult:
- { x: "foo", y: "$bar", rand: { $$type: "double" } }
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *pipeline0
let: *let0
- description: "Aggregate with let option unsupported (server-side error)"
runOnRequirements:
- minServerVersion: "2.6.0"
maxServerVersion: "4.4.99"
operations:
- name: aggregate
object: *collection0
arguments:
pipeline: &pipeline1
- $match: { _id: 1 }
let: &let1
x: foo
expectError:
# Older server versions may not report an error code, but the error
# message is consistent between 2.6.x and 4.4.x server versions.
errorContains: "unrecognized field 'let'"
isClientError: false
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *pipeline1
let: *let1
- description: "Aggregate to collection with let option"
runOnRequirements:
- minServerVersion: "5.0"
serverless: "forbid"
operations:
- name: aggregate
object: *collection0
arguments:
pipeline: &pipeline2
- $match: { $expr: { $eq: ["$_id", "$$id"] } }
- $project: { _id: 1 }
- $out: *collection1Name
let: &let2
id: 1
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *pipeline2
let: *let2
outcome:
- collectionName: *collection1Name
databaseName: *database0Name
documents:
- { _id: 1 }
- description: "Aggregate to collection with let option unsupported (server-side error)"
runOnRequirements:
- minServerVersion: "2.6.0"
maxServerVersion: "4.4.99"
operations:
- name: aggregate
object: *collection0
arguments:
pipeline: *pipeline2
let: *let2
expectError:
errorContains: "unrecognized field 'let'"
isClientError: false
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *pipeline2
let: *let2