合并Mongoose结果

时间:2013-09-19 09:20:08

标签: node.js mongodb mongoose

我有这个Mongoose查询结果:

[ { _id: 523ab1be60239c8120000001,
    posts: 
     [ { _id: 523ab1be60239c8120000002,
         creator: 523ab1be60239c8120000001,
         listingType: 'lease',
         title: 'My Second Listing - Made By Person 1',
         __v: 0 } ] },
  { _id: 523ab1e224bfaea520000001,
    posts: 
     [ { _id: 523ab1e224bfaea520000002,
         creator: 523ab1e224bfaea520000001,
         listingType: 'lease',
         title: 'My Second Listing - Made By Person 2',
         __v: 0 },
       { _id: 523ab865ae55497d27000001,
         creator: 523ab1e224bfaea520000001,
         listingType: 'free',
         title: 'My Third Listing - Made By Person 2',
         __v: 0 } ] } ]

我希望能够将所有posts存储在一个数组或对象中,以便我可以按_id(时间戳)对它们进行排序,并将它们更容易地显示给用户。

关于如何实现这一目标的任何想法?我正在考虑在每个帖子上做一个循环并执行某种类型的排序算法来实现这一点但只是通过单词“loop”,它听起来效率很低。

1 个答案:

答案 0 :(得分:1)

如果您想自己对文档进行排序,我会说要使用MongoDB的sort()函数。但是,由于你想要提取一部分文档,将它们组合成一个对象,然后进行排序,有几个选项,我不确定哪个文档效果最好。

如果你保持查询的方式,那么你真的只能选择在应用程序端使用某种循环进行排序。

可能最简单的方法是使用aggregation framework。根据原始查询的内容,您可以将其转换为$match操作,并在管道中首先使用它。然后,您应该能够通过时间戳$unwind'发布'数组,$sort,并将$group一起重新组合成一个数组。