description: aggregate-write-readPreference schemaVersion: '1.4' runOnRequirements: # 3.6+ non-standalone is needed to utilize $readPreference in OP_MSG - minServerVersion: "3.6" # https://jira.mongodb.org/browse/DRIVERS-291 maxServerVersion: "7.99" 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" 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