AviEzerzer

Untitled

Apr 4th, 2020
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. db.getCollection('communities').aggregate([
  2.     {
  3.         $match: {
  4.             'value.managers': ObjectId('5e6e22147de0fc000ffd24d0'),
  5.             _id: ObjectId('5e812a9a2b21e4000f0e6311'),
  6.         },
  7.     },
  8.     {
  9.         $addFields: {
  10.             manager_requesting: ObjectId('5e6e22147de0fc000ffd24d0'),
  11.         },
  12.     },
  13.     // fetch requesting manager data
  14.     {
  15.         $lookup: {
  16.             from: 'users',
  17.             localField: 'manager_requesting',
  18.             foreignField: '_id',
  19.             as: 'manager',
  20.         },
  21.     },
  22.     { $unwind: '$manager' },
  23.     // fetch ideas for community
  24.     {
  25.         $lookup: {
  26.             from: 'ideas',
  27.             let: { cummunityId: '$_id' },
  28.             pipeline: [
  29.                 {
  30.                     $match: {
  31.                         $expr: {
  32.                             $eq: ['$community', '$$cummunityId'],
  33.                         },
  34.                     },
  35.                 },
  36.                 // fetch views data
  37.                 {
  38.                     $lookup: {
  39.                         from: 'user_actions_history',
  40.                         localField: '_id',
  41.                         foreignField: 'meta.ideaId',
  42.                         as: 'views',
  43.                     },
  44.                 },
  45.                 // fetch idea owner data
  46.                 {
  47.                     $lookup: {
  48.                         from: 'users',
  49.                         let: { owner: '$owner' },
  50.                         pipeline: [
  51.                             {
  52.                                 $match: {
  53.                                     $expr: {
  54.                                         $eq: ['$_id', '$$owner'],
  55.                                     },
  56.                                 },
  57.                             },
  58.                             {
  59.                                 $project: {
  60.                                     _id: 0,
  61.                                     fName: 1,
  62.                                     lName: 1,
  63.                                     email: 1,
  64.                                     faculty: 1,
  65.                                     role: 1,
  66.                                     jobTitle: 1,
  67.                                 },
  68.                             },
  69.                         ],
  70.                         as: 'idea_owner',
  71.                     },
  72.                 },
  73.                 { $unwind: '$idea_owner' },
  74.                 {
  75.                     $project: {
  76.                         _id: 0,
  77.                         title: 1,
  78.                         description: 1,
  79.                         requesting_manager_name: '$manager.fname',
  80.                         owner_fName: "$idea_owner.fName",
  81.                         owner_lName: "$idea_owner.lName",
  82.                         email: "$idea_owner.email",
  83.                         rank: 1,
  84.                         likes: { $size: "$likes" },
  85.                         views: { $size: "$views" },
  86.                         updatedAt: 1,
  87.                     },
  88.                 },
  89.             ],
  90.             as: 'ideasByCommunity',
  91.         },
  92.     },
  93.     { $unwind: "$ideasByCommunity" },
  94.     {
  95.         $group: {
  96.             _id: null,
  97.             //            name: '$value.name',
  98.             //            requesting_manager_name: { $concat: ['$manager.fname', ' ', '$manager.lname'] },
  99.             //            requesting_manager_email: '$manager.email',
  100.             ideasByCommunities: {
  101.                 $push: {
  102.                     name: '$value.name',
  103.                     requesting_manager_name: { $concat: ['$manager.fname', ' ', '$manager.lname'] },
  104.                     requesting_manager_email: '$manager.email',
  105.                     title: '$ideasByCommunity.title',
  106.                     description: '$ideasByCommunity.description',
  107.                     owner_fName: "$ideasByCommunity.owner_fName",
  108.                     owner_lName: "$ideasByCommunity.owner_lName",
  109.                     email: "$ideasByCommunity.email",
  110.                     rank: "$ideasByCommunity.rank",
  111.                     likes: "$ideasByCommunity.likes",
  112.                     views: "$ideasByCommunity.views",
  113.                     updatedAt: 1,
  114.                 }
  115.             },
  116.             //            ideasByCommunities: '$ideasByCommunity',
  117.         },
  118.     },
  119. ]).toArray();
Advertisement
Add Comment
Please, Sign In to add comment