我是MongoDB中的新手。我想对此SQL查询进行等效的mongoDB查询
SELECT * FROM posts WHERE user_id IN
(SELECT follower_id FROM followers WHERE user_id = '@userid')
ORDERBY timestamp
此sql查询列表按时间戳顺序列出了来自关注的用户的所有帖子。
如果用户和帖子有两个集合,那么我该如何在mongoDB中编写等效查询 请帮我解决一下这个。预先感谢。
答案 0 :(得分:0)
SELECT * FROM 帖子 WHERE user_id IN (SELECT follower_id FROM follower WHERE user_id = '@userid') ORDERBY 时间戳
上面的 SQL 转换为下面的 MongoDB 聚合查询:
db.posts.aggregate([{$lookup: {
from: 'followers',
localField: 'user_id',
foreignField: 'user_id',
as: 'userFollowes'
}}, {$unwind: {
path: '$userFollowes',
preserveNullAndEmptyArrays: false
}}, {$match: {
"userFollowes.user_id": "user1"
}}, {$sort: {
timestamp: -1
}}, {$project: {
userFollowes:0
}}])
它的优化版本将使用带条件的查找,以确保我们只对感兴趣的数据进行查找(连接)。
聚合具有以下阶段:
每日提示!:您可以使用以下代码并复制粘贴到聚合选项卡中(在“从纯文本新建管道”选项中 + 图标旁边的向下箭头),以便在指南针中收集帖子,以在调试模式下查看查询输出!>
[{$lookup: {
from: 'followers',
localField: 'user_id',
foreignField: 'user_id',
as: 'userFollowes'
}}, {$unwind: {
path: '$userFollowes',
preserveNullAndEmptyArrays: false
}}, {$match: {
"userFollowes.user_id": "user1"
}}, {$sort: {
timestamp: -1
}}, {$project: {
userFollowes:0
}}]