[英]How to get linked data from 2 collections with aggregation mongoDB
I'm new as MongoDB, I have 2 collections: User
and Video
with below structure.我是 MongoDB 新手,我有 2 个集合:具有以下结构的User
和Video
。 When user like a video, video's _id
will be added to liked_videos
on user collection.当用户喜欢一个视频时,视频的_id
将被添加到用户收藏的liked_videos
。 liked_videos
is an array of _id liked_videos
是一个 _id 数组
video collection视频集
{
_id
mp4_url,
liked_count
}
User collection用户收藏
{
_id,
username,
password,
liked_videos: [ // videos _id array ]
}
How do I query to get the user's liked videos?如何查询以获取用户喜欢的视频? Like below?像下面这样?
[
{
_id: 1
mp4_url,
liked_count
},
{
_id: 2
mp4_url,
liked_count
},
...
]
Thank you谢谢
You need to use $lookup
to join collections and $size
to get the array size您需要使用$lookup
来加入集合,使用$size
来获取数组大小
db.video.aggregate([
{
"$lookup": {
"from": "user",
"localField": "_id",
"foreignField": "liked_videos",
"as": "join_video"
}
},
{
"$project": {
liked_count: {
$size: "$join_video"
}
}
}
])
Working Mongo playground工作Mongo 游乐场
Try this way试试这个方法
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 } ] }
Query :询问 :
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
}
}
])
Output:输出:
[
{
"Likedvideos": [
"aaa",
"ffff"
],
"_id": 1,
"liked_count": 2,
"mp4_url": "url1",
"password": "pwd",
"quantity": 2,
"username": "almonds"
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.