mongo/jstests/aggregation/expressions/expression_object.js

53 lines
1.8 KiB
JavaScript

// Tests expression object compilation with different placements of expression objects in the
// expression tree contained in the projection.
(function() {
"use strict";
load('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)));
}
}());