Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- db.event.aggregate([
- {
- $addFields: {
- convertedDate: {
- $dateFromString: {
- dateString: "$start",
- format: "%Y-%m-%d %H:%M:%S"
- }
- }
- } }
- ,
- { $sort: { "convertedDate": 1 } },
- {
- $lookup: {
- from: 'performer',
- localField: 'performers',
- foreignField: '_id',
- as: 'performers',
- pipeline: [
- { $sort: { name: 1 } }
- ]
- }
- },
- {
- $lookup: {
- from: 'venue',
- localField: 'venues',
- foreignField: '_id',
- as: 'venues',
- pipeline: [
- { $sort: { name: 1 } }
- ]
- }
- },
- {
- $match: {
- $or: [
- { title: { $regex: ".*bee.*", $options: "i" } },
- { performers: { $elemMatch: { name: { $regex: ".*bee.*", $options: "i" } } } },
- { venues: { $elemMatch: { name: { $regex: ".*bee.*", $options: "i" } } } }
- ]
- }
- },
- {
- $group: {
- _id: 0,
- performers: {
- $addToSet: {
- $filter: {
- input: "$performers",
- as: "performer",
- cond: {
- $and: [
- { $ne: ["$$performer", []] },
- { $regexMatch: { input: "$$performer.name", regex: /.*bee.*/i } }
- ]
- }
- }
- }
- },
- venues: {
- $addToSet: {
- $filter: {
- input: "$venues",
- as: "venue",
- cond: {
- $and: [
- { $ne: ["$$venue", []] },
- { $regexMatch: { input: "$$venue.name", regex: /.*bee.*/i } }
- ]
- }
- }
- }
- },
- events: {
- $addToSet: {
- uid: "$uid",
- title: "$title",
- type: "$type",
- start: {
- $dateFromString: {
- dateString: "$start",
- format: "%Y-%m-%d %H:%M:%S"
- }
- },
- performers: {
- names: {
- $slice: ["$performers.name", 7]
- },
- total: {
- $size: "$performers"
- }
- },
- venue: {
- $first: "$venues.name"
- },
- country: {
- $first: "$venues.country.name"
- },
- state: {
- $first: "$venues.state.name"
- },
- city: {
- $first: "$venues.city.name"
- }
- }
- }
- }
- },
- {
- $unwind: {
- path: "$performers", preserveNullAndEmptyArrays: false
- }
- },
- {
- $sort: { "performers.name": 1 }
- },
- {
- $group: {
- _id: "$_id",
- performers: { $push: "$performers" },
- venues: { $first: "$venues" },
- events: { $first: "$events" }
- }
- },
- {
- $unwind: {
- path: "$venues",
- preserveNullAndEmptyArrays: false
- }
- },
- { $sort: { "venues.name": 1 } },
- {
- $group:
- {
- _id: "$_id",
- performers: { $first: "$performers" },
- venues: { $push: "$venues" },
- events: { $first: "$events" }
- }
- },
- { $unwind: "$events" },
- { $sort: { "events.start": 1 } },
- {
- $group:
- {
- _id: "$_id",
- performers: { $first: "$performers" },
- venues: { $first: "$venues" },
- events: { $push: "$events" }
- }
- },
- {
- $project: {
- _id: 0,
- performers: { $slice: ["$performers", 3] },
- events: { $slice: ["$events", 3] },
- venues: { $slice: ["$venues", 3] }
- }
- }
- ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement