Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对嵌套数组进行排序不会改变顺序_Javascript_Mongodb_Meteor_Minimongo - Fatal编程技术网

Javascript 对嵌套数组进行排序不会改变顺序

Javascript 对嵌套数组进行排序不会改变顺序,javascript,mongodb,meteor,minimongo,Javascript,Mongodb,Meteor,Minimongo,我使用以下结构定义了一个集合: // 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 De

我使用以下结构定义了一个集合:

// 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}});
以及:

但顺序保持不变——首先是最早的注释


知道我遗漏了什么吗?

排序
在文档级别工作

这将获取所有匹配的文档,根据子文档中的第一个条目(每个文档数组中第一个元素的创建时间)对它们进行排序,并返回列表中的第一个文档

因为您已经通过
\u id
进行了查询,所以这种排序几乎是徒劳的

Meteor并不真正支持子文档反应性,因此您可以:

  • 将设计扁平化,将评论分离成他们自己的集合(在您的案例中,这可能就是我对Meteor所做的)
  • 将文档转换为数据结构,以便根据需要对其进行排序(这可能是处理反应性时的一个难题)
  • 按照您首先想要的顺序插入它们
  • 通过手动操作光标或使用Mongo聚合框架,在发布过程中进行排序
  • 如果嵌套不是一个要求,我会建议平坦的设计

    以下是一些有关SO和Meteor论坛问题的提示:

    • (流星论坛讨论)

    Websites.findOne({_id:this.params._id}, {sort:{"comments.createdOn": -1}});