【发布时间】:2017-10-24 16:44:35
【问题描述】:
我正在将 MongoDB 与猫鼬一起使用。我有一个订单集合,每个订单都有货币(usd、eur、ils 等)和百分比。
我的节点应用程序从另一个服务读取一个值,并且我的 Order 集合有一个名为 price 的虚拟字段,该字段是根据该值和订单文档的百分比计算得出的。
import mongoose, { Schema } from 'mongoose';
import { priceValue } from '../services/price-value';
const orderSchema = new Schema({
currency: {
type: 'String',
required: true
},
percent: {
type: 'Number',
required: true
}
}, {
toObject: {
virtuals: true
},
toJSON: {
virtuals: true
}
});
orderSchema.virtual('price').get(function() {
return priceValue * this.percent;
});
export default mongoose.model('Order', orderSchema);
我需要找到每种货币的最高价格。类似,对于每个 CURRENCY 调用:
db.orders.find({ currency: CURRENCY }).sort({percent: -1}).limit(1);
在节点应用程序中收集结果并计算虚拟价格字段。
但这感觉不正确。正确的做法是什么?
【问题讨论】:
-
priceValue是否意味着function?或者它只是一个常数值?如果它是一个函数,它缺少(),并且您需要迭代一个“游标”(尽管是一个聚合游标)结果才能应用。但如果它是一个“常数”,那么您可以简单地将值提供给必要的聚合管道并进行计算。 -
@NeilLunn priceValue 是一个值。如何将值提供给必要的聚合管道?我试图避免重复虚拟字段背后的逻辑。
标签: node.js mongodb mongoose aggregation-framework