mongodb聚合从另一个查询获取值

SeY*_*Dev 6 database aggregate mongodb

我有两个收藏

  • 保存关注用户的集合
  • 用户故事集合

我只想查看我关注的用户的故事

这是我的数据库的一个例子

db = {
  "follow": [
    {
      "_id": 1,
      "start": "user1",
      "end": "user2",
      
    },
    {
      "_id": 2,
      "start": "user2",
      "end": "user3",
      
    }
  ],
  "story": [
    {
      "_id": 1,
      "owner_id": "user2",
      "updated_at": 1638090000,
      "deleted_at": null
    },
    {
      "_id": 2,
      "owner_id": "user3",
      "updated_at": 1638080000,
      "deleted_at": null
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想要这样的查询。当然,这是错误的:

db.story.aggregate([
  {
    "$match": {
      "deleted_at": null,
      "updated_at": {
        $gte: 1638081000
      },
      "owner_id": {
        $in: [
          db.follow.find({"start": "user1"})
        ]
      }
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

请注意,我希望所有这些都在一个查询中完成

在 mongo Playground 中查询:https://mongoplayground.net/p/ysRUDW4hRzh

小智 3

你应该在这里使用 $lookup

db.follow.aggregate([
  {
    "$match": {
      "start": "user2"
    }
  },
  {
    $lookup: {
      from: "story",
      localField: "end",
      foreignField: "owner_id",
      pipeline: [],
      as: "stories",
    }
  },
  
])
Run Code Online (Sandbox Code Playgroud)

此查询查找故事数据库,其中 localField(在本例中为 end)等于foreignField(在本例中为owner_id),然后放入故事字段

结果: https ://mongoplayground.net/p/0M6YxYWAQ2n