javascript - Meteor JS 中的排序

标签 javascript mongodb meteor

我在 MeteorJS 中编写了一段小代码,它使用 Mongodb 和 Iron:router (我是 MeteorJS 的新手)。一开始一切都很好,但到了最后,排序就停止了。进一步解释一下,网站列表必须根据其收到的点赞数和创建日期进行排序。以下是代码的相关部分:

//Sorting websites based on userfilter or votes
websites:function(){
  if (Session.get("userFilter")){
    return Websites.find({ createdBy: Session.get("userFilter") }, { sort: { createdOn: -1, up: -1 }});
  } else {
    return Websites.find({},{ sort: { createdOn: -1, up: -1 }});
  } 
},
{{#each websites}}
  <div class="col-xs-12 col-md-3">
    <div class="thumbnail">
      <a href="{{url}}" class="site_name">{{title}}</a>
      <p class="site_desc">{{description}}</p>
      <br>
      <p class="upvote_button">Upvote: {{up}}</p>
      <p class="downvote_button">Downvote: {{down}}</p>
      <a href="#" class="btn btn-default js-upvote" id="upvote_button">
        <span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
      </a>
      <a href="#" class="btn btn-default js-downvote" id="downvote_button">
        <span class="glyphicon glyphicon-arrow-down" aria-hidden="true"></span>
      </a>
      <br>
      <p class="added-by">Added By: 
        <a href="#" class="js-filter">{{getUser createdBy}}</a>
      </p>
      <p>Added On: {{createdOn}}</p>
      <a href="/single_website/{{_id}}">Details</a>
    </div>
  </div>
{{/each}}

最佳答案

当您指定根据多个属性排序时,Mongo 将首先按第一个属性排序,然后对于位于同一“位置”的文档,它将使用您的第二个属性对这些文档进行排序,依此类推。

因此,您将首先获得按 createdOn 日期排序的文档(网站),对于具有完全相同日期(包括时间,如果存在)的文档(网站),则按 up 值排序。我想这不是你想要的。

此外,由于您使用字典/映射对象类型来指定排序,因此您将依赖于 JS 引擎排序实现。在大多数情况下,它会按插入顺序对您的属性进行排序,即 1) createdOn 2) up 在您的情况下。

http://docs.meteor.com/api/collections.html#sortspecifiers

The [{a: 1, b: -1}] form will only work if your JavaScript implementation preserves the order of keys in objects. Most do, most of the time, but it’s up to you to be sure.

最后,您可能会寻找这种排序:

Websites.find({}, {
  sort: [
    ["up", "desc"], // Sort first by "up" value
    ["createdOn", "desc"] // then for websites with same up value, order by date
  ]
})

关于javascript - Meteor JS 中的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38493281/

相关文章:

java - MongoDB : how to index the keys of a Map

mongodb - 如果有多个索引包含相同的字段,会使用哪个索引?

javascript - 为什么我不必将 `import` `anti:fake` 放入我的 Meteor 源文件中?

javascript - 类似于 ASP.NET MVC 中的 SO 的投票系统

javascript - JSON 从 Rails 到 Angularjs

javascript - CSS3 Columns children with margin issue w//Chrome

mongodb - 如何按插入时间对 Meteor 集合进行排序?

javascript - 使用 knockout.js 将数组绑定(bind)到 View 模型

ruby-on-rails - Mongoid Undefined method [] for nil :nilClass

javascript - Uncaught ReferenceError : Meteor is not defined