如何使MongoDB $ lookup过滤返回的文档

时间:2019-01-22 01:53:47

标签: javascript node.js mongodb

我正在构建一个向用户显示新歌曲的应用程序,但是当他们获取新歌曲时,该应用程序将不包含用户之前听过的任何歌曲。这是通过充当连接表的名为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();

0 个答案:

没有答案