【问题标题】:Return an array of movie objects by connecting two collections通过连接两个集合返回一个电影对象数组
【发布时间】:2022-01-23 15:14:17
【问题描述】:

我有一个用户、电影和愿望清单的集合。

一个用户已经存储在一个变量 user_email 中,我想获取所有具有相同 id 的 movie 对象一个存储在愿望清单中。以下是一些架构和数据类型:

示例:

user_email: shangchi@gmail.com

电影 电影架构:

const movieSchema = mongoose.Schema({ 
    image: String, 
    title: String, 
    rating: String, 
    length: String, 
    // timeslots: Array
    timeslots: [{
        id: Number, 
        time: String, 
        seats: []
    }]
});

电影数据样本:

_id: 61d65a3431a314f4fc7e9170
image: "https://static.onecms.io/wp-content/uploads/sites/20/2021/08/25/spence..."
title: "Spencer"
rating: "R"
length: "1 hr 57 min"
timeslots: Array
__v: 0

愿望清单 愿望清单架构:

const wishlistSchema = mongoose.Schema({ 
    user: String, 
    movie: Schema.ObjectId
}

愿望清单中的所有数据:

_id: 61ea4e67984f981ee529c008
user: "shangchi@gmail.com"
movie: 61d65a3431a314f4fc7e9170
__v: 0

_id: 61ecf6f6c7b93b96890c9ebb
user: "shangchi@gmail.com"
movie: 61e3a7bed4f5306388103156
__v: 0

_id: 61ecf73c9f651a07079c9641
user: "hello@gmail.com"
movie: 61e3acc21d84993477d89a22
__v: 0

_id: 61ecf73e9f651a07079c9644
user: "hello@gmail.com"
movie: 61d65a3431a314f4fc7e9170
__v: 0

如何获取与Wishlist集合中所有movies和shangchi email相匹配的所有movie对象数组?

【问题讨论】:

  • 你在用猫鼬吗?
  • 是的,我是。但我似乎无法弄清楚这将如何发展。
  • 您可以运行查找查询并填充愿望清单集合上的电影。查询看起来像这样 - const movies = await Wishlist.find({ user: "shangchi@gmail.com" }).populate("movie", null, "Movie")
  • 这行得通!非常感谢!!
  • 太棒了!我用相同的方法在下面发布了一个答案。请接受它,以便将您的问题标记为已解决,其他人也可以看到解决方案。

标签: mongodb mongoose mern


【解决方案1】:

由于您使用的是 mongoose,因此您可以对 Wishlist 集合执行简单的查找查询,并在电影字段上填充。

const wishlistMovies = await Wishlist.find({ 
  user: "shangchi@gmail.com" 
}).populate("movie", null, "Movie")

这将为使用电子邮件 shangchi@gmail.com 的用户返回心愿单电影列表,其中电影 ID 将被电影文档替换。

【讨论】:

    【解决方案2】:

    $lookup

    db.movie.aggregate([
      {
        $lookup: {
          from: "wishlist",
          let: {
            movieId: "$_id"
          },
          pipeline: [
            {
              $match: {
                $expr: {
                  $and: [
                    {
                      $eq: [
                        "$movie",
                        "$$movieId"
                      ]
                    },
                    {
                      $eq: [
                        "$user",
                        "shangchi@gmail.com"
                      ]
                    }
                  ]
                }
              }
            }
          ],
          as: "wishlist"
        }
      }
    ])
    

    Sample Mongo Playground


    参考

    Perform Multiple Joins and a Correlated Subquery with $lookup

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多