From 33ca6c437107ecc14096bc88f85e6f9d1d240717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 29 Jul 2025 09:44:48 +0200 Subject: [PATCH] PHPLIB-1695 Add $createObjectId operator to the agg builder --- .../config/expression/createObjectId.yaml | 17 +++++++++++ .../Expression/CreateObjectIdOperator.php | 28 +++++++++++++++++++ src/Builder/Expression/FactoryTrait.php | 10 +++++++ .../Expression/CreateObjectIdOperatorTest.php | 27 ++++++++++++++++++ tests/Builder/Expression/Pipelines.php | 17 +++++++++++ 5 files changed, 99 insertions(+) create mode 100644 generator/config/expression/createObjectId.yaml create mode 100644 src/Builder/Expression/CreateObjectIdOperator.php create mode 100644 tests/Builder/Expression/CreateObjectIdOperatorTest.php diff --git a/generator/config/expression/createObjectId.yaml b/generator/config/expression/createObjectId.yaml new file mode 100644 index 000000000..bab85d7f7 --- /dev/null +++ b/generator/config/expression/createObjectId.yaml @@ -0,0 +1,17 @@ +# $schema: ../schema.json +name: $createObjectId +link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/createObjectId/' +type: + - resolvesToObjectId +encode: object +description: | + Returns a random object ID +tests: + - + name: 'Example' + link: 'https://www.mongodb.com/docs/manual/reference/operator/aggregation/createObjectId/#example' + pipeline: + - + $project: + objectId: + $createObjectId: {} diff --git a/src/Builder/Expression/CreateObjectIdOperator.php b/src/Builder/Expression/CreateObjectIdOperator.php new file mode 100644 index 000000000..eef57b3ca --- /dev/null +++ b/src/Builder/Expression/CreateObjectIdOperator.php @@ -0,0 +1,28 @@ +assertSamePipeline(Pipelines::CreateObjectIdExample, $pipeline); + } +} diff --git a/tests/Builder/Expression/Pipelines.php b/tests/Builder/Expression/Pipelines.php index f84d00984..ab995bf68 100644 --- a/tests/Builder/Expression/Pipelines.php +++ b/tests/Builder/Expression/Pipelines.php @@ -910,6 +910,23 @@ enum Pipelines: string ] JSON; + /** + * Example + * + * @see https://www.mongodb.com/docs/manual/reference/operator/aggregation/createObjectId/#example + */ + case CreateObjectIdExample = <<<'JSON' + [ + { + "$project": { + "objectId": { + "$createObjectId": {} + } + } + } + ] + JSON; + /** * Add a Future Date *