繁体   English   中英

如何使用聚合 mongoDB 从 2 个集合中获取链接数据

[英]How to get linked data from 2 collections with aggregation mongoDB

我是 MongoDB 新手,我有 2 个集合:具有以下结构的UserVideo 当用户喜欢一个视频时,视频的_id将被添加到用户收藏的liked_videos liked_videos是一个 _id 数组

视频集

{
    _id
    mp4_url,
    liked_count
}

用户收藏

{
    _id,
    username,
    password,
    liked_videos: [ // videos _id array ]
}

如何查询以获取用户喜欢的视频? 像下面这样?

[
    {
    _id: 1
    mp4_url,
    liked_count
    },
    {
    _id: 2
    mp4_url,
    liked_count
    },
    ...
]

谢谢

您需要使用$lookup来加入集合,使用$size来获取数组大小

db.video.aggregate([
  {
    "$lookup": {
      "from": "user",
      "localField": "_id",
      "foreignField": "liked_videos",
      "as": "join_video"
    }
  },
  {
    "$project": {
      liked_count: {
        $size: "$join_video"
      }
    }
  }
])

工作Mongo 游乐场

试试这个方法

db={ "video": [ { "_id": 1, "mp4_url": "url1", "liked_count": 2, "quantity": 2 }, { "_id": 2, "mp4_url": "url2", "liked_count": 3, "quantity": 1 }, { "_id": 3, "mp4_url": "url2", "liked_count": 3, "quantity": 4 } ], "User": [ { "_id": 1, "username": "almonds", "password": "pwd", "Likedvideos": [ "aaa", "ffff" ] }, { "_id": 2, "username": "almonds", "password": "pwd", "Likedvideos": [ "qqq", "bbbb" ] }, { "_id": 3, "username": "almonds", "password": "pwd", "Likedvideos": [ "ccc", "ffff" ] }, { "_id": 4, "username": "almonds", "password": "pwd", "Likedvideos": [ "bbbb", "ffff" ] }, { "_id": 5, "username": "almonds", "password": "pwd", "Likedvideos": [ "qqq", "ffff" ] }, { "_id": 6 } ] }

询问 :

db.video.aggregate([
  {
    $match: {
      _id: 1
    }
  },
  {
    "$lookup": {
      "from": "User",
      "localField": "_id",
      "foreignField": "_id",
      "as": "data"
    },
    
  },
  {
    $unwind: "$data"
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          "$data",
          "$$ROOT"
        ]
      }
    }
  },
  {
    $project: {
      data: 0
    }
  }
])

输出:

[
  {
    "Likedvideos": [
      "aaa",
      "ffff"
    ],
    "_id": 1,
    "liked_count": 2,
    "mp4_url": "url1",
    "password": "pwd",
    "quantity": 2,
    "username": "almonds"
  }
]

mongoplayground

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM