我正在构建一个向用户显示新歌曲的应用程序,但是当他们获取新歌曲时,该应用程序将不包含用户之前听过的任何歌曲。这是通过充当连接表的名为Listened的集合完成的。
match表达式检查是否存在带有歌曲ID和用户ID的已收听文档。如果是这样,它将返回歌曲,但不会返回相应的已听记录,但我真正想要发生的是在该条件下阻止它一起获取单个歌曲。任何帮助将不胜感激。
const songs = await Song.aggregate([
{
'$lookup': {
'from': 'listeneds',
'let': { 'id': "$_id" },
'pipeline': [
{ '$match':
{ '$expr':
{ '$and':
[
{ 'eq': [ "$song", "$$id" ] },
{ '$ne': [ "$user", userId ] }
]
}
}
},
],
'as': "songsArray",
}
}
]).exec();