mongodb - 根据其他集合中的值从 mongo 集合中获取
问题描述
我有 2 个 mongodb 集合:“用户”和“帖子”。
// users
{
_id,
username,
password,
privacy_level
}
// posts
{
_id,
user_id,
text,
timestamp
}
是否可以根据用户的隐私级别(“公共”)获取所有帖子。在 SQL 中,我会这样做:
SELECT
_id,
text,
timestamp
FROM
posts
JOIN
users
ON
posts.user_id = users._id
WHERE
users.privacy_level = 'public'
在mongodb中是否可以实现这种查询逻辑?
解决方案
是的,您可以使用$lookup轻松实现这一点,它是 SQL 连接的 Mongo 等价物。这是一个从 users 集合开始查询的示例:
db.users.aggregate([
{
$match: {
privacy_level: "public"
}
},
{
"$lookup": {
"from": "posts",
"localField": "_id",
"foreignField": "user_id",
"as": "posts"
}
},
{
$unwind: "$posts"
},
{
$project: {
_id: "$posts._id",
text: "$posts.text",
timestamp: "$posts.timestamp"
}
}
])
推荐阅读
- jenkins - 完成后如何从 Jenkins 构建中获取构建详细信息的 json 响应
- react-native - Expo 不从 VS Code 调试器热重载
- hadoop - Nutch 作为具有自定义处理管道的备用蜘蛛
- python - 如何从 scipy 导入 special.hermite?
- javascript - EStyleSheet 媒体查询和窗口调整大小
- r - ggplot2 计算 x_intercept
- javascript - javascript 和 jquery 实验室
- html - Bootstrap div内的额外填充
- git - Github 仅克隆改进
- javascript - 为什么单击时我的灯箱图像未加载?