【发布时间】: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