data: - {_id: 1, x: 11} - {_id: 2, x: 22} - {_id: 3, x: 33} tests: - description: "FindOneAndUpdate when many documents match returning the document before modification" operation: name: findOneAndUpdate arguments: filter: _id: {$gt: 1} update: $inc: {x: 1} projection: {x: 1, _id: 0} sort: {x: 1} outcome: result: {x: 22} collection: data: - {_id: 1, x: 11} - {_id: 2, x: 23} - {_id: 3, x: 33} - description: "FindOneAndUpdate when many documents match returning the document after modification" operation: name: findOneAndUpdate arguments: filter: _id: {$gt: 1} update: $inc: {x: 1} projection: {x: 1, _id: 0} returnDocument: After sort: {x: 1} outcome: result: {x: 23} collection: data: - {_id: 1, x: 11} - {_id: 2, x: 23} - {_id: 3, x: 33} - description: "FindOneAndUpdate when one document matches returning the document before modification" operation: name: findOneAndUpdate arguments: filter: {_id: 2} update: $inc: {x: 1} projection: {x: 1, _id: 0} sort: {x: 1} outcome: result: {x: 22} collection: data: - {_id: 1, x: 11} - {_id: 2, x: 23} - {_id: 3, x: 33} - description: "FindOneAndUpdate when one document matches returning the document after modification" operation: name: findOneAndUpdate arguments: filter: {_id: 2} update: $inc: {x: 1} projection: {x: 1, _id: 0} returnDocument: After sort: {x: 1} outcome: result: {x: 23} collection: data: - {_id: 1, x: 11} - {_id: 2, x: 23} - {_id: 3, x: 33} - description: "FindOneAndUpdate when no documents match returning the document before modification" operation: name: findOneAndUpdate arguments: filter: {_id: 4} update: $inc: {x: 1} projection: {x: 1, _id: 0} sort: {x: 1} outcome: result: null collection: data: - {_id: 1, x: 11} - {_id: 2, x: 22} - {_id: 3, x: 33} - description: "FindOneAndUpdate when no documents match with upsert returning the document before modification" operation: name: findOneAndUpdate arguments: filter: {_id: 4} update: $inc: {x: 1} projection: {x: 1, _id: 0} # Omit the sort option as it has no effect when no documents # match and would only cause an inconsistent return value on # pre-3.0 servers when combined with returnDocument "before" # (see: SERVER-17650). upsert: true outcome: result: null collection: data: - {_id: 1, x: 11} - {_id: 2, x: 22} - {_id: 3, x: 33} - {_id: 4, x: 1} - description: "FindOneAndUpdate when no documents match returning the document after modification" operation: name: findOneAndUpdate arguments: filter: {_id: 4} update: $inc: {x: 1} projection: {x: 1, _id: 0} returnDocument: After sort: {x: 1} outcome: result: null collection: data: - {_id: 1, x: 11} - {_id: 2, x: 22} - {_id: 3, x: 33} - description: "FindOneAndUpdate when no documents match with upsert returning the document after modification" operation: name: findOneAndUpdate arguments: filter: {_id: 4} update: $inc: {x: 1} projection: {x: 1, _id: 0} returnDocument: After sort: {x: 1} upsert: true outcome: result: {x: 1} collection: data: - {_id: 1, x: 11} - {_id: 2, x: 22} - {_id: 3, x: 33} - {_id: 4, x: 1}