Mongodb Mongoose临时计算字段
对于一个基本示例,我有一个模式:Mongodb Mongoose临时计算字段,mongodb,mongoose,Mongodb,Mongoose,对于一个基本示例,我有一个模式: var testSchema = new Schema({ op1 : Number, op2 : Number }); 然后我希望有一个“total”字段,它不存储在DB中,而是在检索后自动计算出来,并且可能可以用于Mongoose的query.sort 即 然后使用myTestModel.find({}).sort(total).execFind(…) 这是可能的吗?MongoDB不允许您使用普通查询计算字段,但是,您可以使用聚合框架
var testSchema = new Schema({
op1 : Number,
op2 : Number
});
然后我希望有一个“total”字段,它不存储在DB中,而是在检索后自动计算出来,并且可能可以用于Mongoose的query.sort
即
然后使用myTestModel.find({}).sort(total).execFind(…)代码>
这是可能的吗?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) {
}
);
另请参见:虚拟字段使用Mongoose很容易:但排序不是:。“你得自己做。”谢谢!这两个参考资料都很完美。@wiredpairie为什么不把它作为一个答案添加进来,这样我们就可以投票给你了?@starquake-答案已经在那里了。本应作为副本关闭。谢谢。您知道使用此函数是否比通常的.sort javascript函数有性能优势吗?不,对不起,您必须在自己的环境中对其进行基准测试。我希望它在C++中运行得更快,而不是JavaScript。
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) {
}
);