У меня есть следующий запрос в 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
}
}