按日期统计mongoDB中每个用户ID的图像,并将响应映射到用户emailId
我有两个名为User和ImageDetail的集合 我需要找到每个用户的图像计数按日期,响应列表应该包含用户电子邮件Id和用户Id 收集数据:按日期统计mongoDB中每个用户ID的图像,并将响应映射到用户emailId,mongodb,Mongodb,我有两个名为User和ImageDetail的集合 我需要找到每个用户的图像计数按日期,响应列表应该包含用户电子邮件Id和用户Id 收集数据: [ { userId: 'A1', emailId: 'user1@gmail.com', }, { userId: 'A2', emailId: 'user2@gmail.com', } ] [ {
[
{
userId: 'A1',
emailId: 'user1@gmail.com',
},
{
userId: 'A2',
emailId: 'user2@gmail.com',
}
]
[
{
userId: 'A1',
emailId: 'user1@gmail.com',
images: [
{date: '01/02/2018', count: '2'}.
{date: '02/02/2018', count: '1'}.
],
},
{
userId: 'A2',
emailId: 'user2@gmail.com',
images: [
{date: '01/02/2018', count: '1'}.
{date: '02/02/2018', count: '2'}.
{date: '03/02/2018', count: '1'}.
],
}
]
ImageDetail集合
[
{
useId: 'A1',
images: [
{date: '01/02/2018', image: 'image1'},
{date: '01/02/2018', image: 'image2'},
{date: '02/02/2018', image: 'image3'},
]
},
{
useId: "A2",
images: [
{date: '01/02/2018', image: 'image4'},
{date: '02/02/2018', image: 'image5'},
{date: '02/02/2018', image: 'image6'},
{date: '03/02/2018', image: 'image7'},
]
}
]
用户集合:
[
{
userId: 'A1',
emailId: 'user1@gmail.com',
},
{
userId: 'A2',
emailId: 'user2@gmail.com',
}
]
[
{
userId: 'A1',
emailId: 'user1@gmail.com',
images: [
{date: '01/02/2018', count: '2'}.
{date: '02/02/2018', count: '1'}.
],
},
{
userId: 'A2',
emailId: 'user2@gmail.com',
images: [
{date: '01/02/2018', count: '1'}.
{date: '02/02/2018', count: '2'}.
{date: '03/02/2018', count: '1'}.
],
}
]
寻找输出:
[
{
userId: 'A1',
emailId: 'user1@gmail.com',
},
{
userId: 'A2',
emailId: 'user2@gmail.com',
}
]
[
{
userId: 'A1',
emailId: 'user1@gmail.com',
images: [
{date: '01/02/2018', count: '2'}.
{date: '02/02/2018', count: '1'}.
],
},
{
userId: 'A2',
emailId: 'user2@gmail.com',
images: [
{date: '01/02/2018', count: '1'}.
{date: '02/02/2018', count: '2'}.
{date: '03/02/2018', count: '1'}.
],
}
]
使用此聚合:
db.getCollection("ImageDetail").aggregate([
{
$unwind: "$images"
},
{
$group: {
_id: {date: "$images.date", userId: "$userId"},
count: {$sum: 1},
}
},
{
$group: {
_id: "$_id.userId",
images: {$push: {date: "$_id.date", count: "$count"}}
}
},
{
$lookup: {
from: "user",
localField: "_id",
foreignField: "userId",
as: "$match"
}
},
{
$unwind: "$match"
},
{
$project: {
images: "$images",
userId: "$_id",
email: "$match.emailId"
}
}
])