对嵌套数组进行排序不会改变顺序
Sorting of the nested array causes no changes in order
我有一个用以下结构定义的集合:
// Websites
{
_id: "adasdasda",
title: "Site 1",
comments: [{
text: "nice site 2014",
createdOn: "Sat Dec 26 2014 11:28:57 GMT+0100 (CET)"
}, {
text: "nice site 2015",
createdOn: "Sat Dec 26 2015 11:28:57 GMT+0100 (CET)"
}]
}
我想以适当的评论顺序显示这些信息。这意味着在我的情况下,首先是最新的评论。
我尝试使用:
Websites.findOne({_id:this.params._id}, {sort:{"comments.createdOn": 1}});
和:
Websites.findOne({_id:this.params._id}, {sort:{"comments.createdOn": -1}});
但顺序保持不变——最古老的评论优先。
知道我错过了什么吗?
sort
在文档级别工作。
这将获取所有匹配的文档,根据子文档中的第一个条目(每个文档数组中第一个元素的创建时间)对它们进行排序,并返回列表中的第一份文档。
由于您已经通过_id
进行了查询,所以这种排序几乎是徒劳的。
Meteor并不真正支持子文档反应性,因此您可以:
- 将设计扁平化,将评论分离成自己的集合(在你的情况下,这可能是我对Meteor所做的)
- 将文档转换为一个数据结构,根据需要对其进行排序(在处理反应性时,这可能会让人头疼)
- 按照你想要的顺序插入它们
- 在发布过程中,通过手动操作光标或使用Mongo聚合框架来进行排序
如果嵌套不是一个要求,我建议将设计扁平化。
以下是一些有关SO和Meteor论坛问题的提示:
-
MongoDB:排序对象的嵌套数组
-
如何在mongoDB 中对集合记录中的数组进行排序
-
嵌套子文档是个坏主意吗?(流星论坛讨论)
相关文章:
- 改变奇数ng在角度上重复的顺序
- 对嵌套数组进行排序不会改变顺序
- 保持数组的顺序,但改变索引的位置
- System.Web.Optimization在最小化javascript时会改变js文件的顺序
- 改变Jquery中事件的顺序
- 当我简单地改变两个表达式的顺序时,为什么这个for循环不能工作?
- 如何使用jQuery旋转HTML内容,使顺序每30秒改变一次
- mxGraph改变单元格的层顺序
- Jquery内容滑块插件,可以动态改变幻灯片的顺序
- Jquery如何改变手风琴的顺序
- 新版本的FF改变了输入属性的顺序
- 数据源查询回调问题(调用顺序,改变全局变量的能力)
- 改变奥蕾莉亚的排列顺序,奇怪的行为
- 如何动态地改变链接的顺序
- 使用jQuery改变元素顺序的最优方法
- 改变字符串中字母和数字的位置(顺序)
- AngularJS -在ng-click上改变顺序
- 如何改变“;[“和”]“;使用javascript或jQuery按顺序排列
- 当改变顺序时重复击倒
- 改变顺序