我有民意调查&投票,我想对最高民意调查(投票最多的民意调查)进行排序。 这是我的架构:
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
这应该是有效的,但如果有的话,我正在寻找更好的方法。 有点像猫鼬的新手,所以我可能会错过阅读文档的东西。
答案 0 :(得分:1)
所以,如果我理解正确,你希望返回每个游泳池收到的票数吗?
为实现这一目标,您可以使用Mongo聚合https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/,然后将其转换为Moongose。
在您的情况下,您的代码将如下所示:
notifyDataSetChanged();
这将返回您的数组,其中 _id 代表您的投票,投票将代表收到的投票数。数组将按降序数进行排序。请注意, $ lookup 会返回一个数组,因此您需要将其解压缩。