按日期统计mongoDB中每个用户ID的图像,并将响应映射到用户emailId

按日期统计mongoDB中每个用户ID的图像,并将响应映射到用户emailId,mongodb,Mongodb,我有两个名为User和ImageDetail的集合 我需要找到每个用户的图像计数按日期,响应列表应该包含用户电子邮件Id和用户Id 收集数据: [ { userId: 'A1', emailId: 'user1@gmail.com', }, { userId: 'A2', emailId: 'user2@gmail.com', } ] [ {

我有两个名为User和ImageDetail的集合

我需要找到每个用户的图像计数按日期,响应列表应该包含用户电子邮件Id和用户Id

收集数据

    [
       {
         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"
        }
    }
])