对Mongo游标进行排序,使得某些文档首先出现

时间:2015-10-06 13:45:58

标签: mongodb meteor

我有一个需要搜索的Mongo集合,返回的结果排序如下:

  • 首先是文件ID是否存在于我传入的数组中。
  • 然后是文档中的另一个字段。

我的用例是用户有一组我喜欢在列表中首先显示的'favourited'项目。我将id列表存储在用户的文档中。

有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

正如上面提到的@Challet一样,添加了模板,以避免连接两个搜索结果并在这个过程中保持两个列表都是反应性的:

<强> HTML:

<template name="myTemplate">
{{#each favorites}}
  {{> detail}}
{{/each}}
{{#each nonFavorites}}
  {{> detail}}
{{/each}}
</template>

<template name="detail">
... layout details here ...
</template>

<强> JS:

var idsOfFavorites = []; // however you maintain this

Template.myTemplate.helpers({
  favorites: function(){
    return MyCollection.find({ _id: { $in: idsOfFavorites }},
      { sort: { createdAt: -1 }}); // sorting by createdAt but could be any field
  },
  nonFavorites: function(){
    return MyCollection.find({ _id: { $nin: idsOfFavorites }},
      { sort: { createdAt: -1 }});
  }
});