【问题标题】:$addField with subQuery in MongoDB aggregation$addField 与 MongoDB 聚合中的 subQuery
【发布时间】:2021-02-01 23:37:04
【问题描述】:

我有 2 个系列:Chargers 和 Reservation。我希望在查询充电器时将未来 7 天的预订作为字段附加(即从现在到下周同一天的时间范围)。

充电器的模型如下所示:

{
    "name":"charger 2",
    "address":"test, test, USA",
    "current_type": 1,
    "charge_level" : 2,
    "plug_type" : 1,
}

预订模型如下所示:

{
  "charger_id": ObjectId("test ID"),
  "start_time": "31-01-2021",
  "end_time": "1-02-2021"
}

我发现了在聚合管道中添加字段的聚合 $addField,但我想知道是否可以在“子查询”上使用 $addfield。本质上,对于每个匹配的充电器,获取给定时间范围内的所有预留,其中充电器ID 是匹配中的一个,并将预留数组添加为字段。生成的模型如下所示:

{
    "name":"charger 2",
    "address":"test, test, USA",
    "current_type": 1,
    "charge_level" : 2,
    "plug_type" : 1,
    "reservations" : [
       ...
    ]
}

当前获取数据的方式是对应用程序结果进行 2 次查询,但这会因网络延迟而变得相当繁重。

查询 1 - 充电器:

{"_id":<charger_id>}

得到结果后,我再次查询。 查询 2 - 预订:

{
"charger_id": <charger_id>,
"start_time" : {
   "$lte" : <date in a week>
   }
}

通过 ID 获取并不算太糟糕,因为在首先查询充电器之前我已经有了 ID,但是使用 getAll 或任何其他查询按ID查询,真的很费劲。

【问题讨论】:

  • 您能否详细说明“未来 7 天内”?您指的是特定日期范围吗?或者您想在接下来的 7 天内更改您的架构...不确定我是否明白这一点。
  • 子查询是什么?您可以添加您的初始查询尝试吗?为了更好地理解
  • 没问题!会更清楚

标签: mongodb aggregation-framework


【解决方案1】:

要从另一个集合中引入数据,您需要使用 $lookup。 $addFields 可用于根据结果集中已有的数据添加字段。

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2013-05-02
    相关资源
    最近更新 更多