【问题标题】:Meteor collection find sort after filtering流星集合过滤后查找排序
【发布时间】:2015-01-24 14:22:50
【问题描述】:

我有一个地址集合,我想过滤集合以保留最近的 10 个地址,然后我希望能够从远到近对它们进行排序。

是否有可能在流星中的单个查找请求中实现这一点?

以下是我最近的 10 个地址:

Addresses.find({}, {sort:{distance:1}, limit:10});

但它们是按距离递增排序的,显然如果我设置distance:-1 它们将按递减顺序排列,但我也只会得到最远的 10 个地址……

【问题讨论】:

    标签: mongodb collections meteor


    【解决方案1】:

    你需要聚合框架:

    db.collection.aggregate(
      { $sort: { distance: 1 } },
      { $limit: 10 },
      { $sort: { distance: -1 } }
    )
    

    我希望查询是不言自明的。

    如果您无法在 MeteorJS 中运行 aggregation 或本机 mongo 查询,那么您可能必须以编程方式反转从 DB 查询中获得的结果。

    【讨论】:

    • 您的答案在 MongoDB 上下文中是正确的,但现在 findAndModify, aggregate functions, and map/reduce aren't supported. as in the documentation
    • 编辑供您阅读。
    【解决方案2】:

    如果您fetch 是搜索结果,reverse 它应该可以工作。

    Addresses.find({}, {sort:{distance:1}, limit:10}).fetch().reverse()

    唯一的缺点是现在它是一个数组而不是游标了

    【讨论】:

    • 这就是我最终所做的,将光标保持在数据上的一种方法是在两者之间创建一个匿名集合,然后使用观察模式用过滤后的集合填充它。最后,对过滤后的匿名集合进行排序。但在这种情况下,这是一个矫枉过正......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多