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

158 lines
4.9 KiB
YAML

description: aggregate-write-readPreference
schemaVersion: '1.4'
runOnRequirements:
# 3.6+ non-standalone is needed to utilize $readPreference in OP_MSG
- minServerVersion: "3.6"
topologies: [ replicaset, sharded, load-balanced ]
_yamlAnchors:
readConcern: &readConcern
level: &readConcernLevel "local"
writeConcern: &writeConcern
w: &writeConcernW 1
createEntities:
- client:
id: &client0 client0
observeEvents:
- commandStartedEvent
# Used to test that read and write concerns are still inherited
uriOptions:
readConcernLevel: *readConcernLevel
w: *writeConcernW
- database:
id: &database0 database0
client: *client0
databaseName: &database0Name db0
- collection:
id: &collection0 collection0
database: *database0
collectionName: &collection0Name coll0
collectionOptions:
readPreference: &readPreference
# secondaryPreferred is specified for compatibility with clusters that
# may not have a secondary (e.g. each shard is only a primary).
mode: secondaryPreferred
# maxStalenessSeconds is specified to ensure that drivers forward the
# read preference to mongos or a load balancer. That would not be the
# case with only secondaryPreferred.
maxStalenessSeconds: 600
- collection:
id: &collection1 collection1
database: *database0
collectionName: &collection1Name coll1
initialData:
- collectionName: *collection0Name
databaseName: *database0Name
documents:
- { _id: 1, x: 11 }
- { _id: 2, x: 22 }
- { _id: 3, x: 33 }
- collectionName: *collection1Name
databaseName: *database0Name
documents: []
tests:
- description: "Aggregate with $out includes read preference for 5.0+ server"
runOnRequirements:
- minServerVersion: "5.0"
serverless: "forbid"
# GODRIVER-3218
maxServerVersion: "7.99"
operations:
- object: *collection0
name: aggregate
arguments:
pipeline: &outPipeline
- { $match: { _id: { $gt: 1 } } }
- { $sort: { x: 1 } }
- { $out: *collection1Name }
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *outPipeline
$readPreference: *readPreference
readConcern: *readConcern
writeConcern: *writeConcern
outcome: &outcome
- collectionName: *collection1Name
databaseName: *database0Name
documents:
- { _id: 2, x: 22 }
- { _id: 3, x: 33 }
- description: "Aggregate with $out omits read preference for pre-5.0 server"
runOnRequirements:
# MongoDB 4.2 introduced support for read concerns and write stages.
# Pre-4.2 servers may allow a "local" read concern anyway, but some
# drivers may avoid inheriting a client-level read concern for pre-4.2.
- minServerVersion: "4.2"
maxServerVersion: "4.4.99"
serverless: "forbid"
operations:
- object: *collection0
name: aggregate
arguments:
pipeline: *outPipeline
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *outPipeline
$readPreference: { $$exists: false }
readConcern: *readConcern
writeConcern: *writeConcern
outcome: *outcome
- description: "Aggregate with $merge includes read preference for 5.0+ server"
runOnRequirements:
- minServerVersion: "5.0"
operations:
- object: *collection0
name: aggregate
arguments:
pipeline: &mergePipeline
- { $match: { _id: { $gt: 1 } } }
- { $sort: { x: 1 } }
- { $merge: { into: *collection1Name } }
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *mergePipeline
$readPreference: *readPreference
readConcern: *readConcern
writeConcern: *writeConcern
outcome: *outcome
- description: "Aggregate with $merge omits read preference for pre-5.0 server"
runOnRequirements:
- minServerVersion: "4.2"
maxServerVersion: "4.4.99"
operations:
- object: *collection0
name: aggregate
arguments:
pipeline: *mergePipeline
expectEvents:
- client: *client0
events:
- commandStartedEvent:
command:
aggregate: *collection0Name
pipeline: *mergePipeline
$readPreference: { $$exists: false }
readConcern: *readConcern
writeConcern: *writeConcern
outcome: *outcome