Смешать данные из MySQL в запросе MongoDB? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть следующий запрос в MongoDB, который выбирает последние 10 бесед, в которых участвовал пользователь. Они сортируются по последнему сообщению в беседе. У меня есть способ разбить результаты на части, используя $ gt в выражении match. На данный момент это закомментировано.

Я ограничил количество участников до 3 (используя слайс), потому что групповой диалог может содержать, например, 30, 40, 50, ... членов.

Проблема: У меня есть MySQL база данных для хранения реляционной информации. Итак, у меня есть таблица users и таблица followers, чтобы показать, кто следует друг за другом. Я хочу каким-то образом включить эту информацию в MongoDB, чтобы я мог найти 3 подписчиков, на которых я подписан, чтобы показать соответствующие фотографии профиля известных людей. Допустим, у меня есть разговор с 50 участниками, затем я хочу получить 3 человек, за которыми я слежу (если они есть), поэтому я вижу знакомые изображения профиля. Это возможно каким-то образом, или мой wi sh невозможен?

query

db.getCollection('conversations').aggregate([
    {
      $lookup: {
        foreignField: "c_ID",
        from: "messages",
        localField: "_id",
        as: "messages"
      }
    },
    {
      "$unwind": "$messages"
    },
    {
      "$sort": {
        "messages.t": -1
      }
    },
    {
      "$group": {
        "_id": "$_id",
        "lastMessage": {
          "$first": "$messages"
        },
        "allFields": {
          "$first": "$$ROOT"
        }
      }
    },
    {
      "$replaceRoot": {
        "newRoot": {
          "$mergeObjects": [
            "$allFields",
            {
              "lastMessage": "$lastMessage"
            }
          ]
        }
      }
    },
    {
      $project: {
        messages: 0
      }
    },
    {
      $match: {
        "members.uID": "1",
        //"lastMessage.t": { $gt: ISODate("2020-02-04 20:38:02.154Z") }
      }
    },
    {
      $sort: { "lastMessage.t": 1 }
    },
    {
      $limit: 10
    },
    {
      $project: {
        members: {
          $slice: [ {
            $filter: {
              input : "$members", as : "member", cond : {
                $ne : ["$$member.uID" , "1"]
              }
            }
          }, 3 ]
        }
      }
    },
  ])

документ бесед

{
    "_id" : ObjectId("5e35f2c840713a43aeeeb3d9"),
    "members" : [ 
        {
            "uID" : "1",
            "j" : 1580580922
        }, 
        {
            "uID" : "4",
            "j" : 1580580922
        }, 
        {
            "uID" : "5",
            "j" : 1580580922
        }
    ]
}

документ сообщений

{
    "_id" : ObjectId("5e35ee5f40713a43aeeeb1c5"),
    "c_ID" : ObjectId("5e35f2c840713a43aeeeb3d9"),
    "fromID" : "1",
    "msg" : "What's up?",
    "t" : 1580591922,
    "d" : {
        "4" : 1580592039
    },
    "r" : {
        "4" : 1580592339
    }
}
...