mysql - 在 MongoDB 查询中混合来自 MySQL 的数据?
问题描述
我在 MongoDB 中有以下查询,它选择用户参与的最后 10 个对话。它们根据对话中的最后一条消息进行排序。我有一种方法可以在 match 语句中使用 $gt 在结果之间进行分页。目前,这已被注释掉。
我将成员数量限制为 3(使用切片),因为群组对话可以包含例如 30、40、50、...成员。
问题:我有一个 MySQL 数据库来存储关系信息。所以我有一张桌子users
和一张桌子followers
,以显示谁在互相关注。我想以某种方式将此信息包含到 MongoDB 中,这样我就可以找到我关注的 3 个成员,以显示已知人的相关个人资料图片。假设我与 50 个成员进行了对话,然后我想检索我关注的 3 个人(如果有的话),所以我看到了熟悉的个人资料图片。这在某种程度上是可能的,还是我的愿望不可能?
询问
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
}
}
解决方案
推荐阅读
- css - 在 div 列表中按类名选择第一个元素(仅限 css)
- python - 组合 2 个 itertools 产品列表以获得更大的组合以查找所有组合
- javascript - 设置二维数组的最大参数
- android - 存储访问框架 - 文件选择器应用程序是否未在云上实现 ACTION_OPEN_DOCUMENT_TREE?
- c# - Webbrowser Control的InnerText中大JSON的C#问题
- php - 如何使用 php 根据用户角色更改 WordPress 管理页面的背景颜色?
- javascript - 为什么 axios 请求在 vuejs(nuxt.js)方法中不起作用
- electron - 如何检查为什么我的电子进程被 Windows 杀死?
- c# - 在知道坐标的情况下找到一条线在三维空间中的旋转角度
- javascript - setInterval time not getting correct value