【问题标题】:Custom sort and limit publication in MeteorMeteor 中的自定义排序和限制发布
【发布时间】:2016-08-18 16:57:05
【问题描述】:

简短:我需要正则表达式搜索一个集合,将完美匹配移动到结果的第一个位置,然后限制该结果。

长一:

在出版物中,我需要对我的结果进行自定义排序,然后(当然是在排序之后)对其进行限制。

我的自定义排序类似于按相关性排序,但不完全是。鉴于这些文件:

{ number: '2123' } // let's call this one A
{ number: '21' } // and this one B
{ number: 'A2123' } // and this one C
{ number: '01' } // and this one D

如果我使用术语21 进行搜索,我想得到ABC。但是在第一个位置B。为什么?因为B 匹配完美。你看?它不是完全按相关性排序,而是将完美匹配(最多只有 1 个完美匹配)移动到第一位。

我尝试了text indexes,但它们与2123 与搜索词21 不匹配。 (我明白为什么,这很好)

那么我的问题到底是什么?我可以正则表达式搜索并发布该游标,但它会有太多文档。我可以限制它,但如果不进行排序,我可能会丢失我绝对需要的完美匹配。

所以最后我不能自定义排序。然后我有了这个想法:我为什么不fetch() 我的光标(未排序且无限制),对获取的数组进行排序和限制,并基于该排序数组创建一个“人工”光标。我没有找到实现这一目标的方法。

【问题讨论】:

  • 你为什么要使用 Meteor?

标签: mongodb meteor


【解决方案1】:

这是一个有点骇人听闻的想法:

  1. 订阅两个不同的出版物,exactMatchesallMatches
  2. exactMatches 应该只返回完全匹配,仅限于您的计数
  3. allMatches 将返回所有匹配项,也仅限于您的计数

现在,您可以在客户端上.find().fetch() 对集合进行重新排列并以优化的顺序排列。

这种方法将 (a) 保证您看到所有精确匹配,(b) 最小化网络流量,(c) 将排序负载放在客户端而不是服务器上。

想一想,您还可以在部分匹配之前单独渲染精确匹配,因此您只需要对后者进行排序。大火中:

{{#each exactMatches}}
  {{> result}}
{{/each}}
{{#each partialMatches}}
  {{>result}}
{{/each}}

【讨论】:

  • 有同样的想法,但希望 Meteor 能给我更多朴实无华的可能性。仍然感谢您的时间和确认这是我要走的路。
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多