mongo/jstests/aggregation/expressions/expression_object.js

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)));
}