Meteor JS中的排序
Sorting in Meteor JS
我在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
只有当JavaScript实现保留了对象中键的顺序时,[
{a: 1, b: -1}
]表单才会起作用。大多数人在大多数时候都会这样做,但这取决于你自己。
最后,你可能已经找到了这种排序:
Websites.find({}, {
sort: [
["up", "desc"], // Sort first by "up" value
["createdOn", "desc"] // then for websites with same up value, order by date
]
})
你可能想做一些类似的事情
Websites.find({}).sort({createdOn:-1, up:-1})
希望它能起作用
如果不尝试添加此
Websites.ensureIndex({createdOn: -1, up: -1})
感谢
相关文章:
- Selectize.js:如何对整数值的选项进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 在d3.js中对x轴上的日期进行排序
- Sencha Ext JS排序标准以字符串而不是JSON的形式发送
- 使用JS或新查询对列表进行排序
- 如何使d3.js树布局按字母顺序对节点进行排序
- 如何在角度js的自动完成下拉列表中对项目列表(按字母顺序)进行排序
- 酒窝 JS 多个 y 轴 - 更改默认排序
- 按类别排序;元素有多个类别(同位素.js)
- 转到其他 URL 后,如何保持排序的骨干.js集合
- 骨干.js具有多种排序的集合
- 如何在节点中进行 Json 对象排序.js
- 可排序.js不起作用:列表项不可拖动
- 嵌套可排序.js toarray 不起作用
- 按特定字母排序JS字符串数组
- 排序JS数组按日期DD/MM/YY格式
- 在HTML页面中排序js文件的最佳方式
- 长XML - 优化排序(js - google adwords)
- 使用时刻和排序插件在数据表中按日期(dd.mm.YYYY)排序.js