当foreignField为数组时,$ lookup

时间:2019-02-05 17:00:24

标签: mongodb mongoose mongodb-query aggregation-framework

我有2个收藏,第一个收藏每个用户观看的动漫,它们的状态等:

const listSchema = mongoose.Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: 'user'
  },
  animes: [{
    _id: false,
    anime: {
      type: Schema.Types.ObjectId,
      ref: 'anime',
      unique: true
    },
    status: String,
    episodes: Number,
    rating: Number
  }]
});

,第二个存储所有动漫和相关信息。 我想显示第二个集合,但添加从登录用户列表中填充的statusepisodes字段。

我尝试了以下操作:

Anime.aggregate([
    {
      $lookup: {
        'from': 'lists',
        localField: '_id',
        foreignField: 'animes.anime',
        'as': 'name'
      },
    },
    {
      $unwind: '$animes'
    },
    {
      $project:{
        status:'$lists.animes.status'
      }
    }
  ]
)

,但它返回一个空数组。 我还不知道如何userId来过滤_id在国外馆藏中的情况。

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总

{ "$lookup": {
  "from": "lists",
  "let": { "id": "$_id" },
  "pipeline": [
    { "$match": { "$expr": { "$in": ["$$id", "$animes.anime"] }}},
    { "$unwind": "$animes" },
    { "$match": { "$expr": { "$eq": ["$animes.anime", "$$id"] }}}
  ],
  "as": "name"
}}