如何使用一组ID查找集合中的最新文档

use*_*602 14 javascript mongodb meteor mongodb-query

我有一个系列Feeds和一个系列FeedElements.FeedElements文档Feeds通过feedId字段引用该集合.此外,所有FeedElements文档都有日期字段submitted.

我想只发布最新的(由字段确定submitted)FeedElements文档,该文档对应于一个Feeds文档.

这是我尝试过的:

Meteor.publish('recentFeedElements', function (userId) {
    var feedIds = Feeds.find({'userId': userId}).map(function(feed) {
        return feed._id;
    });
    if (feedsIds.length > 0) return FeedElements.find({feedId: {$in: feedIds}}, {sort: {submitted: -1});
    else this.ready();
});
Run Code Online (Sandbox Code Playgroud)

问题是,如果我用limit结合sort的内部FeedElements.find()查询,我只得到所有的最新文档Feed文件.但是,我希望有一个严格的1-1关系.所以,一个Feed文件 - >最新的FeedElements文件与适当的参考.

Som*_*luk 0

您可以通过$sort$group & $first聚合框架来获取它。

db.FeedElements.aggregate(
[
  { $match: { feedId: {$in:[1,2,3]}} },
  { $sort: { submitted: -1} },
  {
    $group:
    {
      _id: "$feedId",
      firstFeedElement: {$first : "$$ROOT"} // Get first whole document or you can take fields you want
    }
     }
   ]
)
Run Code Online (Sandbox Code Playgroud)