Advertisement
Guest User

Untitled

a guest
Jan 25th, 2023
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. db.event.aggregate([
  2.     {
  3.         $addFields: {
  4.             convertedDate: {
  5.                 $dateFromString: {
  6.                     dateString: "$start",
  7.                     format: "%Y-%m-%d %H:%M:%S"
  8.                 }
  9.             }
  10.         } }
  11.     ,
  12.     { $sort: { "convertedDate": 1 } },
  13.     {
  14.         $lookup: {
  15.             from: 'performer',
  16.             localField: 'performers',
  17.             foreignField: '_id',
  18.             as: 'performers',
  19.             pipeline: [
  20.                 { $sort: { name: 1 } }
  21.             ]
  22.         }
  23.     },
  24.     {
  25.         $lookup: {
  26.             from: 'venue',
  27.             localField: 'venues',
  28.             foreignField: '_id',
  29.             as: 'venues',
  30.             pipeline: [
  31.                 { $sort: { name: 1 } }
  32.             ]
  33.         }
  34.     },
  35.     {
  36.         $match: {
  37.             $or: [
  38.                 { title: { $regex: ".*bee.*", $options: "i" } },
  39.                 { performers: { $elemMatch: { name: { $regex: ".*bee.*", $options: "i" } } } },
  40.                 { venues: { $elemMatch: { name: { $regex: ".*bee.*", $options: "i" } } } }
  41.             ]
  42.         }
  43.     },
  44.     {
  45.         $group: {
  46.             _id: 0,
  47.             performers: {
  48.                 $addToSet: {
  49.                     $filter: {
  50.                         input: "$performers",
  51.                         as: "performer",
  52.                         cond: {
  53.                             $and: [
  54.                                 { $ne: ["$$performer", []] },
  55.                                 { $regexMatch: { input: "$$performer.name", regex: /.*bee.*/i } }
  56.                             ]
  57.                         }
  58.                     }
  59.                 }
  60.             },
  61.             venues: {
  62.                 $addToSet: {
  63.                     $filter: {
  64.                         input: "$venues",
  65.                         as: "venue",
  66.                         cond: {
  67.                             $and: [
  68.                                 { $ne: ["$$venue", []] },
  69.                                 { $regexMatch: { input: "$$venue.name", regex: /.*bee.*/i } }
  70.                             ]
  71.                         }
  72.                     }
  73.                 }
  74.             },
  75.             events: {
  76.                 $addToSet: {
  77.                     uid: "$uid",
  78.                     title: "$title",
  79.                     type: "$type",
  80.                     start: {
  81.                         $dateFromString: {
  82.                             dateString: "$start",
  83.                             format: "%Y-%m-%d %H:%M:%S"
  84.                         }
  85.                     },
  86.                     performers: {
  87.                         names: {
  88.                             $slice: ["$performers.name", 7]
  89.                         },
  90.                         total: {
  91.                             $size: "$performers"
  92.                         }
  93.                     },
  94.                     venue: {
  95.                         $first: "$venues.name"
  96.                     },
  97.                     country: {
  98.                         $first: "$venues.country.name"
  99.                     },
  100.                     state: {
  101.                         $first: "$venues.state.name"
  102.                     },
  103.                     city: {
  104.                         $first: "$venues.city.name"
  105.                     }
  106.                 }
  107.             }
  108.         }
  109.     },
  110.     {
  111.         $unwind: {
  112.             path: "$performers", preserveNullAndEmptyArrays: false
  113.         }
  114.     },
  115.     {
  116.         $sort: { "performers.name": 1 }
  117.     },
  118.     {
  119.         $group: {
  120.             _id: "$_id",
  121.             performers: { $push: "$performers" },
  122.             venues: { $first: "$venues" },
  123.             events: { $first: "$events" }
  124.         }
  125.     },
  126.     {
  127.         $unwind: {
  128.             path: "$venues",
  129.             preserveNullAndEmptyArrays: false
  130.         }
  131.     },
  132.     { $sort: { "venues.name": 1 } },
  133.     {
  134.         $group:
  135.             {
  136.                 _id: "$_id",
  137.                 performers: { $first: "$performers" },
  138.                 venues: { $push: "$venues" },
  139.                 events: { $first: "$events" }
  140.             }
  141.     },
  142.     { $unwind: "$events" },
  143.     { $sort: { "events.start": 1 } },
  144.     {
  145.         $group:
  146.             {
  147.                 _id: "$_id",
  148.                 performers: { $first: "$performers" },
  149.                 venues: { $first: "$venues" },
  150.                 events: { $push: "$events" }
  151.             }
  152.     },
  153.     {
  154.         $project: {
  155.             _id: 0,
  156.             performers: { $slice: ["$performers", 3] },
  157.             events: { $slice: ["$events", 3] },
  158.             venues: { $slice: ["$venues", 3] }
  159.         }
  160.     }
  161. ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement