use('test_FreePlanet');

let aggregation = [
  {
    $match: {
      idapp: "13",
    },
  },
  {
    $sort: {
      date_updated: -1,
    },
  },
  {
    $lookup: {
      from: "users",
      let: {
        tab: 1,
        id: "$_id",
      },
      pipeline: [
        {
          $unwind: "$profile.favorite",
        },
        {
          $match: {
            $expr: {
              $and: [
                {
                  $eq: [
                    "$profile.favorite.id",
                    "$$id",
                  ],
                },
                {
                  $eq: [
                    "$profile.favorite.tab",
                    "$$tab",
                  ],
                },
                {
                  $eq: [
                    "$idapp",
                    "13",
                  ],
                },
              ],
            },
          },
        },
        { $project: { username: 1, _id: 0 } },
      ],
      as: "myfav",
    },
  },
  {
    $lookup: {
      from: "users",
      let: {
        tab: 1,
        id: "$_id",
      },
      pipeline: [
        {
          $unwind: "$profile.bookmark",
        },
        {
          $match: {
            $expr: {
              $and: [
                {
                  $eq: [
                    "$profile.bookmark.id",
                    "$$id",
                  ],
                },
                {
                  $eq: [
                    "$profile.bookmark.tab",
                    "$$tab",
                  ],
                },
              ],
            },
          },
        },
      ],
      as: "mybook",
    },
  },
  {
    $addFields: {
      myId1: {
        $toObjectId: "$userId",
      },
    },
  },
  {
    $lookup: {
      from: "users",
      localField: "myId1",
      foreignField: "_id",
      as: "user",
    },
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          {
            $arrayElemAt: [
              "$user",
              0,
            ],
          },
          "$$ROOT",
        ],
      },
    },
  },
  {
    $project: {
      recSkill: 1,
      sector: 1,
      idSector: 1,
      idSkill: 1,
      myskill: 1,
      idStatusSkill: 1,
      idContribType: 1,
      "profile.username_telegram": 1,
      "profile.favorite": 1,
      "profile.bookmark": 1,
      idCity: 1,
      pub_to_share: 1,
      numLevel: 1,
      adType: 1,
      photos: 1,
      note: 1,
      website: 1,
      descr: 1,
      date_created: 1,
      date_updated: 1,
      userId: 1,
      username: 1,
      name: 1,
      surname: 1,
      lasttimeonline: 1,
      comune: 1,
      mycities: 1,
      "profile.img": 1,
      "profile.mygroups": 1,
      "profile.qualifica": 1,
      "profile.resid_province": 1,
      reported: 1,
      date_report: 1,
      username_who_report: 1,
      myfav: 1,
      mybook: 1,
    },
  },
  {
    $lookup: {
      from: "skills",
      localField: "idSkill",
      foreignField: "_id",
      as: "recSkill",
    },
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          {
            $arrayElemAt: [
              "$recSkill",
              0,
            ],
          },
          "$$ROOT",
        ],
      },
    },
  },
  {
    $project: {
      recSkill: 1,
      sector: 1,
      idSector: 1,
      idSkill: 1,
      myskill: 1,
      idStatusSkill: 1,
      idContribType: 1,
      "profile.username_telegram": 1,
      "profile.favorite": 1,
      "profile.bookmark": 1,
      idCity: 1,
      pub_to_share: 1,
      numLevel: 1,
      adType: 1,
      photos: 1,
      note: 1,
      website: 1,
      descr: 1,
      date_created: 1,
      date_updated: 1,
      userId: 1,
      username: 1,
      name: 1,
      surname: 1,
      lasttimeonline: 1,
      comune: 1,
      mycities: 1,
      "profile.img": 1,
      "profile.mygroups": 1,
      "profile.qualifica": 1,
      "profile.resid_province": 1,
      reported: 1,
      date_report: 1,
      username_who_report: 1,
      myfav: 1,
      mybook: 1,
    },
  },
  {
    $lookup: {
      from: "sectors",
      localField: "idSector",
      foreignField: "_id",
      as: "sector",
    },
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          {
            $arrayElemAt: [
              "$sector",
              0,
            ],
          },
          "$$ROOT",
        ],
      },
    },
  },
  {
    $project: {
      recSkill: 1,
      sector: 1,
      idSector: 1,
      idSkill: 1,
      myskill: 1,
      idStatusSkill: 1,
      idContribType: 1,
      "profile.username_telegram": 1,
      "profile.favorite": 1,
      "profile.bookmark": 1,
      idCity: 1,
      pub_to_share: 1,
      numLevel: 1,
      adType: 1,
      photos: 1,
      note: 1,
      website: 1,
      descr: 1,
      date_created: 1,
      date_updated: 1,
      userId: 1,
      username: 1,
      name: 1,
      surname: 1,
      lasttimeonline: 1,
      comune: 1,
      mycities: 1,
      "profile.img": 1,
      "profile.mygroups": 1,
      "profile.qualifica": 1,
      "profile.resid_province": 1,
      reported: 1,
      date_report: 1,
      username_who_report: 1,
      myfav: 1,
      mybook: 1,
      myseen: 1,
    },
  },
  {
    $lookup: {
      from: "cities",
      localField: "idCity",
      foreignField: "_id",
      as: "mycities",
    },
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          {
            $arrayElemAt: [
              "$mycities",
              0,
            ],
          },
          "$$ROOT",
        ],
      },
    },
  },
  {
    $project: {
      recSkill: 1,
      sector: 1,
      idSector: 1,
      idSkill: 1,
      myskill: 1,
      idStatusSkill: 1,
      idContribType: 1,
      "profile.username_telegram": 1,
      "profile.favorite": 1,
      "profile.bookmark": 1,
      idCity: 1,
      pub_to_share: 1,
      numLevel: 1,
      adType: 1,
      photos: 1,
      note: 1,
      website: 1,
      descr: 1,
      date_created: 1,
      date_updated: 1,
      userId: 1,
      username: 1,
      name: 1,
      surname: 1,
      lasttimeonline: 1,
      comune: 1,
      mycities: 1,
      "profile.img": 1,
      "profile.mygroups": 1,
      "profile.qualifica": 1,
      "profile.resid_province": 1,
      reported: 1,
      date_report: 1,
      username_who_report: 1,
      myfav: 1,
      mybook: 1,
    },
  },
  {
    $match: {
      $or: [
        {
          $and: [
            {
              "profile.mygroups": {
                $elemMatch: {
                  groupname: {
                    $in: [
                      "000017",
                      "risoprova",
                      "VillaggiamoItalia",
                      "Terraw",
                      "RisoBenevento",
                      "111",
                      "gruppodefaultriso",
                      "pontiUmani",
                    ],
                  },
                },
              },
            },
            {
              pub_to_share: 1,
            },
          ],
        },
        {
          $or: [
            {
              pub_to_share: {
                $exists: false,
              },
            },
            {
              pub_to_share: {
                $exists: true,
                $eq: 0,
              },
            },
          ],
        },
      ],
    },
  },
  {
    $match: {
      $and: [
        {
          "mycities.reg": "EMR",
        },
      ],
    },
  },
  {
    $group: {
      _id: null,
      count: {
        $sum: 1,
      },
      results: {
        $push: "$$ROOT",
      },
    },
  },
  {
    $project: {
      count: 1,
      rows: {
        $slice: [
          "$results",
          0,
          10,
        ],
      },
    },
  },
];

db.myskills.aggregate(aggregation);

