在我的集合中,每个文档都有两个如下所示的值:
{
originalPrice: 500,
ourPrice: 420
}
正如您可以想象的那样,我希望用户能够根据他们从我们这里节省购物的数量来排序,而不是从竞争对手那里获得,这对于这个特殊商品来说是80元。
但是,这个值本身不在数据库中,所以我不能简单地做
Goods.find({}, {sort: saveAmount: 1})
或类似的东西。
在数据库中插入这个数字可能是一件容易的事,但除非让事情以其他方式运作的方法非常复杂,否则我不愿意这样做。
所以我想要一个能做到这一点的功能,
var saveAmount = function(originalPrice, ourPrice) {
return originalPrice - ourPrice
}
并以某种方式使用此值进行排序!
我该怎么做?
答案 0 :(得分:1)
您可以在MongoDB查询中执行此操作,但不能使用meteor。因此,您必须按照建议使用单独的字段。这是你可以做的:
function setDifference (doc) {
var difference = doc.originalPrice - doc.ourPrice
Goods.update(doc._id, { $set: { difference: difference } })
}
Goods.find().observe({
added: setDifference,
updated: setDifference
})
如果您使用的是简单架构,则可以使用autoValue
。
...
difference: {
type: Number,
autoValue: function () {
return this.field('originalPrice').value - this.field('ourPrice').value
}
}
...
无论如何,现在您只需按difference
排序:
Goods.find({}, {sort: {difference: -1}})
答案 1 :(得分:1)
以下是如何在客户端上按排序顺序显示货物的示例:
<强> JS 强>
Template.myTemplate.helpers({
sortedGoods: function() {
return _.sortBy(Goods.find().fetch(), function(good) {
return good.originalPrice - good.ourPrice;
});
}
});
<强> HTML 强>
<template name="myTemplate">
{{#each sortedGoods}}
<div class="good">{{name}}: ${{ourPrice}}</div>
{{/each}}
</template>