我有以下的故事图式:
story : {
content: string,
seenBy: Types.ObjectId[]
}
这里seenBy
是用户阵列,
现在我有了一个故事列表,我想根据某个特定登录用户最先看到的故事和最后看到的故事对列表进行排序,
意味着如果登录的userid
为2,则seenBy中具有特定userid
的故事应排在最后,其他故事应排在前面。
我不知道该怎么做。
在我登录userid
的API中,
我尝试了以下方法,但它给出了编译时错误:
const totalStories = await this.Story.find({})
.populate(this.populateStory())
.sort({ seenBy: (val) => {
return val.includes(userid) ? -1 : 1
}, updatedAt: 'desc' });
我搜索了许多地方,但没有得到任何与我的问题陈述有关的东西。
先谢谢你
1条答案
按热度按时间8dtrkrch1#
经过一番研究,我想出了一个解决办法,
使用聚合函数可以将字段临时添加到文档中,我们可以按如下方式对该字段进行排序:
这样,我们就可以使用任何自定义逻辑进行排序,因为字段
seen
将是基于文档中数据的布尔值。我从下面的链接得到的想法:MongoDB ($addField)
prop :
1.您可以编写自定义逻辑(条件)并相应地进行排序。
1.因为它是一个查询,所以会给出乐观的复杂性,而不是数组上的sort()函数。
缺点:
1.由于聚合,无法填充()(注意:作为替代方法,您可以使用$lookup(作为连接)填充数据MongoDB ($lookup)