首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据两个字段的差异对集合进行排序?

如何根据两个字段的差异对集合进行排序?
EN

Stack Overflow用户
提问于 2015-06-28 06:04:12
回答 2查看 109关注 0票数 0

在我的集合中,每个文档都有两个值,如下所示:

代码语言:javascript
运行
复制
{
  originalPrice: 500,
  ourPrice: 420
}

正如您可以想象的那样,我希望用户能够根据他们从我们而不是竞争对手那里节省的购物费用进行排序,在这种情况下,竞争对手的价格是80。

但是,这个值本身不在数据库中,所以我不能简单地这样做

代码语言:javascript
运行
复制
Goods.find({}, {sort: saveAmount: 1})

或者其他类似的东西。

在数据库中插入这个数字可能是一项简单的任务,但除非让事情以另一种方式工作的方法非常复杂,否则我不希望这样做。

所以我想要一个函数来做这件事,

代码语言:javascript
运行
复制
var saveAmount = function(originalPrice, ourPrice) {
  return originalPrice - ourPrice
}

并以某种方式使用该值进行排序!

我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2015-06-28 06:33:00

您可以在MongoDB查询中执行此操作,但不能使用meteor。因此,您必须按照您的建议使用单独的字段。下面是你可以做的:

代码语言:javascript
运行
复制
function setDifference (doc) {
  var difference = doc.originalPrice - doc.ourPrice
  Goods.update(doc._id, { $set: { difference: difference } })
}

Goods.find().observe({
  added: setDifference,
  updated: setDifference
})

如果你使用的是简单模式,你可以使用autoValue

代码语言:javascript
运行
复制
...
difference: {
  type: Number,
  autoValue: function () {
    return this.field('originalPrice').value - this.field('ourPrice').value
  }
}
...

不管怎样,现在你可以直接按difference排序了

代码语言:javascript
运行
复制
Goods.find({}, {sort: {difference: -1}})
票数 1
EN

Stack Overflow用户

发布于 2015-06-28 07:37:59

下面是一个如何在客户机上按排序显示商品的示例:

js

代码语言:javascript
运行
复制
Template.myTemplate.helpers({
  sortedGoods: function() {
    return _.sortBy(Goods.find().fetch(), function(good) {
      return good.originalPrice - good.ourPrice;
    });
  }
});

html

代码语言:javascript
运行
复制
<template name="myTemplate">
  {{#each sortedGoods}}
    <div class="good">{{name}}: ${{ourPrice}}</div>
  {{/each}}
</template>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31093980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档