Details
-
Task
-
Resolution: Fixed
-
Major - P3
-
None
-
None
-
None
-
Query Integration
-
Fully Compatible
-
QI 2023-10-02
Description
> db.ts.aggregate([{$match: {tag: "a"}}, {$project: {f: 1, time: 1, tag: 1}}], {collation: {locale: "en", strength: 1}}); |
[2] mkbson s13 [_id = s10, f = s11, time = s12, tag = s6] true false |
[2] block_to_row blocks[s7, s8, s9] vals[s10, s11, s12] |
[2] ts_bucket_to_cellblock s2 paths[s7 = _id, s8 = f, s9 = time] meta = s6 |
[1] filter {traverseF(s1, lambda(l1.0) { ((l1.0 ==[s5] s4) ?: false) }, false)} |
[1] scan s2 s3 none none none none none none lowPriority [s1 = meta] @"2238077b-8893-4b6c-bbb4-21b5f72c55de" true false |
Note that in the above example, both s1 and s6 holds the 'meta' field.
> db.ts.aggregate([{$match: {tag: {$in: ["a", "c"]}}}, {$project: {f: 1, time: 1, tt: {$concat: ["$tag", "-", "abc"]}, ss: {$concat: ["$tag", "XYZ"]}}}], {collation: {locale: "en", strength: 1}}); |
[3] mkbson s15 [_id = s12, f = s13, time = s14, ss = s7, tt = s8] true false |
[3] block_to_row blocks[s9, s10, s11] vals[s12, s13, s14] |
[3] ts_bucket_to_cellblock s6 paths[s9 = _id, s10 = f, s11 = time] |
[2] project [s7 = getField(s6, "ss"), s8 = getField(s6, "tt")] |
[2] project [s6 = makeBsonObj(MakeObjSpec(drop, [], ["tt", "ss"]), s2, |
if (typeMatch(s1, 1088ll) ?: true) |
then null |
else |
if isString(s1) |
then concat(s1, "-abc") |
else fail(7158201, "$concat supports only strings") |
,
|
if (typeMatch(s1, 1088ll) ?: true) |
then null |
else |
if isString(s1) |
then concat(s1, "XYZ") |
else fail(7158201, "$concat supports only strings") |
)]
|
[1] filter {traverseF(s1, lambda(l1.0) { isMember(l1.0, s4) }, false)} |
[1] scan s2 s3 none none none none none none lowPriority [s1 = meta] @"2238077b-8893-4b6c-bbb4-21b5f72c55de" true false |
Also we should be able to avoid materialize the temporary BSON object for the computed meta fields.
Attachments
Issue Links
- depends on
-
SERVER-79697 Add a QuerySolutionNode to lower $_internalUnpackBucket
-
- Closed
-
- related to
-
SERVER-83621 Consider adding metaField to UnpackTsBucketNode::providedSorts()
-
- Open
-