首页 > 解决方案 > 根据其他集合中的值从 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中是否可以实现这种查询逻辑?

标签: mongodbjoin

解决方案


是的,您可以使用$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"
    }
  }
])

蒙戈游乐场


推荐阅读