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文件与适当的参考.
您可以通过$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)