【问题标题】:Mongoose temporary calculated fieldMongoose 临时计算字段
【发布时间】:2013-07-25 17:22:46
【问题描述】:

对于一个基本示例,我有一个架构:

var testSchema = new Schema({
  op1    : Number,
  op2     : Number
});

然后我想要一个“总计”字段,它不存储在 DB 中,而是在检索后自动计算,并且可能可用于 Mongoose 的 query.sort。

total = op1 + op2

然后使用myTestModel.find({}).sort(total).execFind(...);

这可能吗?

【问题讨论】:

  • 使用 Mongoose 可以轻松实现虚拟字段:stackoverflow.com/a/12982125/95190
  • 排序不是:stackoverflow.com/a/13453207/95190。你需要自己做。
  • @WiredPrairie 谢谢!这两个参考是完美的。
  • @WiredPrairie 为什么不将其添加为答案,以便我们为您投票?
  • @starquake - 答案已经在那里了。应该作为重复关闭。

标签: mongodb mongoose


【解决方案1】:

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

【讨论】:

  • 谢谢。你知道使用它是否比通常的 .sort javascript 函数有性能优势吗?
  • 不抱歉,您必须在自己的环境中进行基准测试。我希望它更快,因为它在 C++ 的数据库中运行 - 而不是 javascript。
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
相关资源
最近更新 更多