The $redact
operator of the aggregation framework is your best option:
db.collection.aggregate([
{ "$redact": {
"$cond": {
"if": { "$lt": [ { "$add": [ "$b", "$c" ] }, 5 ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}},
{ "$project": { "_id": 0, "a": 1 } }
])
The logical condition is made via $lt
on the math expression of $add
in order to determine which items to keep.
The $project
selects the fields.
The alternate is $where
which uses JavaScript evalution. Not as effective due to the JavaScript translation required ( the following is a shell shortcut for $where
):
db.collection.find(
function() {
return ( this.b + this.c ) < 5;
},
{ "_id": 0, "a": 1 }
);
Or:
db.collection.find(
{ "$where": "return ( this.b + this.c ) < 5;" },
{ "_id": 0, "a": 1 }
);
Which is basically the same thing.
Native operators are more performant than JavaScript evalutation.
solved MongoDB query condition including SUM