MongoDB:基于另一个集合从一个集合中进行条件选择

bor*_*ork 3 mongodb aggregation-framework

我对 MongoDB 相当陌生,需要帮助根据另一个集合的数据对一个集合进行选择或某种左连接。

我有两个集合,动物和膳食,我想获取在某个日期(假设是 20171001)之后上次注册膳食的动物,以确定该动物是否仍然活跃。

collection animals:
{
    name: mr floof,
    id: 12345,
    lastMeal: abcdef
},
{
    name: pluto,
    id: 6789,
    lastMeal: ghijkl
}

collection meals:
{
    id: abcdef,
    created: 20171008,
    name: carrots
},
{
    id: ghijkl,
    created: 20170918,
    name: lettuce
}
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下查询的预期输出将是:

{
    name: mr floof,
    id: 12345,
    lastMeal: abcdef
}
Run Code Online (Sandbox Code Playgroud)

由于 Floof 先生在 20171008 年(即 20171001 年之后)吃过最后一顿饭。

希望我说得足够清楚,但如果没有,请随时询问。

use*_*814 6

您可以尝试下面的聚合查询。

db.animals.aggregate([ [
  {
    "$lookup": {
      "from": "meals",
      "localField": "lastMeal",
      "foreignField": "id",
      "as": "last_meal"
    }
  },
  {
    "$unwind": "$last_meal"
  },
  {
    "$match": {
      "last_meal.created": {
        "$gt": 20171001
      }
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

更多信息请点击这里。

您可以在阶段$project后使用排除$match来格式化响应以排除连接的字段。就像是{ $project: {"last_meal":0} }