Mongoose由ref counter排序

时间:2016-07-12 20:41:15

标签: mongoose

我有民意调查&投票,我想对最高民意调查(投票最多的民意调查)进行排序。 这是我的架构:

pollSchema = Schema ({
    ...
};

voteSchema = Schema ({
    ...
    poll: { type: Schema.ObjectId, ref: "Poll" },
    user: { type: Schema.ObjectId, ref: "User" }
};

所以基本上每个投票都指向它所属的民意调查,而不是相反(为了保持单一"真相来源")。 (我之所以没有引用/保留民意调查投票的子文件,是因为投票也应该引用选民)。

我正在努力寻找一种简单的方法来对所有民意调查进行排序,通过多少投票指向他们(基本上用他们的票数来表达民意调查)。

当然,那里有艰苦的工作方式(伪代码):

- find all polls (Poll.find({}))
- count all votes to each poll and keeping it in a counter on each poll object (Vote.count({ poll: polls[i].id }))
- sort the polls like a regular javascript array

这应该是有效的,但如果有的话,我正在寻找更好的方法。 有点像猫鼬的新手,所以我可能会错过阅读文档的东西。

1 个答案:

答案 0 :(得分:1)

所以,如果我理解正确,你希望返回每个游泳池收到的票数吗?

为实现这一目标,您可以使用Mongo聚合https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/,然后将其转换为Moongose。

在您的情况下,您的代码将如下所示:

notifyDataSetChanged();

这将返回您的数组,其中 _id 代表您的投票,投票将代表收到的投票数。数组将按降序数进行排序。请注意, $ lookup 会返回一个数组,因此您需要将其解压缩。