mongodb $ group сравнить одну коллекцию с другой коллекцией - PullRequest
0 голосов
/ 29 апреля 2020

Я застрял в одной точке. Посмотрите на эту игровую площадку, она должна следовать этой логике c:

  • , если коллекция истории пуста, вернуть данные
  • , если коллекция дат истории больше, чем основа коллекции main на указанном user_id, ничего не возвращать
  • , если указано user_id не совпадает с датой сбора истории, тогда он должен вернуть все данные, которые находятся в основной коллекции.

Так что на детской площадке все выглядит хорошо единственная проблема, когда я помещаю 5e4e74eb380054797d9db623 id, он не должен возвращать мне данные, потому что его дата истекла, тогда как основная коллекция


   db.main.aggregate([
      {
        $lookup: {
          from: "history",
          localField: "history_id",
          foreignField: "history_id",
          as: "History"
        }
      },
      {
        $unwind: {
          path: "$History",
          preserveNullAndEmptyArrays: true
        }
      },
      {
        $sort: {
          _id: 1,
          "History.history_id": 1,
          "History.date": 1
        }
      },
      {
        $group: {
          _id: "$_id",
          data: {
            $last: "$$ROOT"
          },
          History: {
            $last: "$History"
          }
        }
      },
      {
        $replaceRoot: {
          newRoot: {
            $mergeObjects: [
              "$data",
              {
                History: "$History"
              }
            ]
          }
        }
      },
      {
        "$match": {
          $expr: {
            $or: [
              {
                $eq: [
                  {
                    $type: "$History.date"
                  },
                  "missing"
                ]
              },
              {
                $ne: [
                  "5e4e74eb380054797d9db623",
                  "$History.user_id"
                ]
              },
              {
                $and: [
                  {
                    $eq: [
                      "5e4e74eb380054797d9db623",
                      "$History.user_id"
                    ]
                  },
                  {
                    $gt: [
                      "$date",
                      "$History.date"
                    ]
                  }
                ]
              }
            ]
          }
        }
      }
    ])

MongoPlayground

...