For a basic example I have a schema:
var testSchema = new Schema({
op1 : Number,
op2 : Number
});
then I want to have a "total" field that's not stored in DB but automatically computed after retrieval, and possibly can be used for Mongoose's query.sort.
I.e.
total = op1 + op2
then use myTestModel.find({}).sort(total).execFind(...);
Is this possible?
MongoDB doesn't allow you to calculate fields with normal queries, however, you can do this with the aggregation framework. You'd do that like this:
myTestModel.aggregate(
{ $match: {} }, // your find query
{ $project: {
op1: 1, // original fields
op2: 1,
total: { $add: ['$op1', '$op2' ] } // calculated field
} },
{ $sort: { total: 1 } },
// And then the normal Mongoose stuff:
function (err, res) {
}
);
See also: http://mongoosejs.com/docs/api.html#model_Model.aggregate
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With