diff options
Diffstat (limited to 'src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/split_match_on_meta_and_rename_test.cpp')
-rw-r--r-- | src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/split_match_on_meta_and_rename_test.cpp | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/split_match_on_meta_and_rename_test.cpp b/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/split_match_on_meta_and_rename_test.cpp index ba4f31adf17..4ce5d558ac4 100644 --- a/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/split_match_on_meta_and_rename_test.cpp +++ b/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/split_match_on_meta_and_rename_test.cpp @@ -56,7 +56,7 @@ TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, OptimizeSplitsMatchAndMaps // predicate on 'control.min.a'. These two created $match stages should be added before // $_internalUnpackBucket and merged. auto serialized = pipeline->serializeToBson(); - ASSERT_EQ(3u, serialized.size()); + ASSERT_EQ(2u, serialized.size()); ASSERT_BSONOBJ_EQ(fromjson("{$match: {$and: [" " {meta: {$gte: 0}}," " {meta: {$lte: 5}}," @@ -68,8 +68,13 @@ TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, OptimizeSplitsMatchAndMaps " ]}" "]}}"), serialized[0]); - ASSERT_BSONOBJ_EQ(unpack, serialized[1]); - ASSERT_BSONOBJ_EQ(fromjson("{$match: {a: {$lte: 4}}}"), serialized[2]); + ASSERT_BSONOBJ_EQ(fromjson("{ $_internalUnpackBucket: { " + "exclude: [], " + "timeField: \"foo\", " + "metaField: \"myMeta\", " + "bucketMaxSpanSeconds: 3600, " + "eventFilter: { a: { $lte: 4 } } } }"), + serialized[1]); } TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, OptimizeMovesMetaMatchBeforeUnpack) { @@ -94,10 +99,6 @@ TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, auto unpack = fromjson( "{$_internalUnpackBucket: { exclude: [], timeField: 'foo', metaField: 'myMeta', " "bucketMaxSpanSeconds: 3600}}"); - auto unpackExcluded = fromjson( - "{$_internalUnpackBucket: { include: ['_id', 'data'], timeField: 'foo', metaField: " - "'myMeta', " - "bucketMaxSpanSeconds: 3600}}"); auto pipeline = Pipeline::parse(makeVector(unpack, fromjson("{$project: {data: 1}}"), fromjson("{$match: {myMeta: {$gte: 0}}}")), @@ -108,9 +109,11 @@ TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, // The $match on meta is not moved before $_internalUnpackBucket since the field is excluded. auto serialized = pipeline->serializeToBson(); - ASSERT_EQ(2u, serialized.size()); - ASSERT_BSONOBJ_EQ(unpackExcluded, serialized[0]); - ASSERT_BSONOBJ_EQ(fromjson("{$match: {myMeta: {$gte: 0}}}"), serialized[1]); + ASSERT_EQ(1u, serialized.size()); + ASSERT_BSONOBJ_EQ(fromjson("{ $_internalUnpackBucket: { include: [ \"_id\", \"data\" ], " + "timeField: \"foo\", metaField: \"myMeta\", bucketMaxSpanSeconds: " + "3600, eventFilter: { myMeta: { $gte: 0 } } } }"), + serialized[0]); } TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, @@ -134,7 +137,7 @@ TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, // We should fail to split the match because of the $or clause. We should still be able to // map the predicate on 'x' to a predicate on the control field. auto serialized = pipeline->serializeToBson(); - ASSERT_EQ(3u, serialized.size()); + ASSERT_EQ(2u, serialized.size()); auto expected = fromjson( "{$match: {$and: [" // Result of pushing down {x: {$lte: 1}}. @@ -154,8 +157,13 @@ TEST_F(InternalUnpackBucketSplitMatchOnMetaAndRename, " ]}" "]}}"); ASSERT_BSONOBJ_EQ(expected, serialized[0]); - ASSERT_BSONOBJ_EQ(unpack, serialized[1]); - ASSERT_BSONOBJ_EQ(match, serialized[2]); + ASSERT_BSONOBJ_EQ( + fromjson( + "{ $_internalUnpackBucket: { " + "exclude: [], timeField: \"foo\", metaField: \"myMeta\", bucketMaxSpanSeconds: 3600, " + "eventFilter: { $and: [ { x: { $lte: 1 } }, { $or: [ { \"myMeta.a\": { $gt: 1 } }, { " + "y: { $lt: 1 } } ] } ] } } }"), + serialized[1]); } } // namespace } // namespace mongo |