我正在使用node和mongoose构建应用程序。我有这个模型
{
price: Number,
price_special: Number,
price_special_from: DateTime,
price_special_to: DateTime
}
我很好奇我是否可以使用聚合框架按当前价格对集合进行排序。当前价格应该像这样计算
function(model){
if(now > model.price_special_from && now < model.price_special_to) {
return model.price_special;
} else {
return model.price;
}
}
我需要在大型集合上运行此类,因此我无法在应用程序中执行此操作。我想到的唯一方法是让计数属性由cron更新。这不是最佳的。
Plase建议如何为此案例构建$project
查询。
更新
我解决了这个问题&#34;重复&#34;使用聚合框架的问题。我将$cond
运算符与$and
运算符结合使用。
db.getCollection('products').aggregate(
[
{
$project:
{
price: 1,
price_special: 1,
price_special_from: 1,
price_special_to: 1,
current_price:
{
$cond: { if: {
$and: [
{$ne: ["$price_special", null]},
{$ne: ["$price_special_to", null]},
{$ne: ["$price_special_from", null]},
{$gt: [new Date(),"$price_special_from"]},
{$lt: [new Date(),"$price_special_to"]}
]
},
then: "$price_special",
else: "$price"
}
}
}
},{ $limit : 100 }
]
)