mirror of https://github.com/mongodb/mongo
48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
// Tests expression object compilation with different placements of expression objects in the
|
|
// expression tree contained in the projection.
|
|
|
|
import {documentEq} from "jstests/aggregation/extras/utils.js";
|
|
|
|
const coll = db.expression_object;
|
|
coll.drop();
|
|
assert.commandWorked(coll.insert({"_id": "doc1", "field": "val1"}));
|
|
|
|
// All of the following tests filter nothing out and only compute the required projections.
|
|
// Each test contains Expression Object(s) at different positions within the expression tree.
|
|
// The fourth test projects the comparison result of two empty objects, which is true.
|
|
const emptyFilterDoc = {};
|
|
const testCases = [
|
|
{projectionDoc: {label1: "$fieldRef1"}, resultDoc: {_id: "doc1"}},
|
|
{
|
|
projectionDoc: {label2: {"$eq": ["$_id", {label21: "$fieldRef21"}]}},
|
|
resultDoc: {_id: "doc1", label2: false},
|
|
},
|
|
{
|
|
projectionDoc: {label3: {"$eq": [{label31: "$fieldRef31"}, "$_id"]}},
|
|
resultDoc: {_id: "doc1", label3: false},
|
|
},
|
|
{
|
|
projectionDoc: {label4: {"$eq": [{label41: "$fieldRef41"}, {label42: "$fieldRef42"}]}},
|
|
resultDoc: {_id: "doc1", label4: true},
|
|
},
|
|
{
|
|
projectionDoc: {
|
|
label5: {
|
|
"$eq": [
|
|
{label51: {"$eq": ["$_id", {label511: "$fieldRef511"}]}},
|
|
{label52: {"$eq": [{label521: "$fieldRef521"}, "$_id"]}},
|
|
],
|
|
},
|
|
},
|
|
resultDoc: {_id: "doc1", label5: false},
|
|
},
|
|
{
|
|
projectionDoc: {label6: {"$eq": [{label61: {"$eq": [{label611: "$fieldRef611"}, "$_id"]}}, "$_id"]}},
|
|
resultDoc: {_id: "doc1", label6: false},
|
|
},
|
|
];
|
|
|
|
for (let testCase of testCases) {
|
|
assert(documentEq(testCase.resultDoc, coll.findOne(emptyFilterDoc, testCase.projectionDoc)));
|
|
}
|