对于一个基本示例,我有一个架构:
var testSchema = new Schema({
op1 : Number,
op2 : Number
});
然后我希望有一个“总计”字段,它不存储在数据库中,但在检索后自动计算,并且可能用于Mongoose的query.sort。
即
total = op1 + op2
然后使用myTestModel.find({}).sort(total).execFind(...);
这可能吗?
答案 0 :(得分:5)
MongoDB不允许您使用普通查询计算字段,但是,您可以使用聚合框架执行此操作。你这样做是这样的:
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) {
}
);
另请参阅:http://mongoosejs.com/docs/api.html#model_Model.aggregate