【问题标题】:How to formulate a mongoose query in which (Field A * Field B + Field C) < f?如何制定 (Field A * Field B + Field C) < f 的猫鼬查询?
【发布时间】:2020-08-28 00:07:41
【问题描述】:
我需要获取计算票价低于固定值的所有在线司机的列表。简而言之,制定猫鼬查询的最佳方法是:
(RATE * DISTANCE) + BASE_FARE
其中 RATE 和 BASE_FARE 是同一个查询的 Driver 模式中的字段,'max_fare' 是一个常数,而 DISTANCE 是从聚合管道中的前一个 $geoNear 阶段获得的字段?
【问题讨论】:
标签:
javascript
node.js
database
mongodb
mongoose
【解决方案1】:
好的。我估计。基本上我需要使用 $expr。我的最终聚合管道阶段如下所示:
pipeline.push({
$match:{$expr:{$and:[{$gte:[{$add:[{$multiply:["$ratePerKM",{$add:[{$divide:["$distance",1000]},query.maxKM.$gte]}]},"$baseFee"]},query.fareMin]},
{$lte:[{$add:[{$multiply:["$ratePerKM",{$add:[{$divide:["$distance",1000]},query.maxKM.$gte]}]},"$baseFee"]},query.fareMax]}]}}});
过滤计算的票价,使其介于最小值和最大值之间。