mongodb - MongoDB 3.6 - 如何使用 $lookup 修改此聚合查询,使其可以在多个文档上运行?
问题描述
我有 2 个集合,我想使用运算符对它们进行连接$lookup
。我想加入的字段有不同的类型。$toObjectId
由于升级数据库的挑战,我不能使用Operator,也不能修改现有数据。
处方集合
{"_id" : ObjectId("p1"), "currentOrderId" : "o1"}
{"_id" : ObjectId("p2"), "currentOrderId" : "o2"}
{"_id" : ObjectId("p3"), "currentOrderId" : "o3"}
{"_id" : ObjectId("p4"), "currentOrderId" : "o4"} ...
订单收集
{"_id" : ObjectId("o1"), "orderNumber": "123"}
{"_id" : ObjectId("o2"), "orderNumber": "123"}
{"_id" : ObjectId("o3"), "orderNumber": "123"}
{"_id" : ObjectId("o4"), "orderNumber": "123"} ...
我必须将订单文件加入处方文件,所以我的结果集合看起来像这样:
{"_id" : ObjectId("p1"),
"currentOrderId" : "o1",
"currentOrder": {
"_id" : ObjectId("o1"),
"orderNumber": "123"
}
......(更多文件)......
我只能使用以下查询加入一对处方和订单文件:
db.prescription.aggregate([
{ $match: {"_id":ObjectId("p1")}},
{ $addFields: { "coid": ObjectId("o1")}},
{ $lookup: {
from: "order",
localField: "coid",
foreignField: "_id",
as: "currentOrder"
}},
{
$unwind: "$currentOrder",
},
])
注意我硬编码了$match
and$addfields
来测试我的查询。现在我想应用此查询,以便能够将所有订单批量加入处方集合。
这是我的想法:
我们不知道有多少处方,也不知道他们的
_id's
,因此我们需要运行一个查询来获取他们的_ids
。并将其存储在列表中。我需要批量应用这个查询,所以我可能会删除匹配运算符。
我还需要获取订单列表
_id's
,我可以对处方集合运行另一个查询,以获取订单 ID 的字符串列表。我需要以某种方式将第 3 步中的字符串列表批量转换为 objectID。
抱歉,我现在只有这些。只要查询的数量不变,我会考虑涉及更多查询的答案。请注意,我不能使用 3.6 版之后引入的任何运算符。
非常感谢任何帮助或提示。
解决方案
推荐阅读
- python - 蟒蛇 | 你得到| 为什么我的电脑不能运行你得到的脚本?
- c# - 从 3 个列表创建一个元组列表
- angular - 使用带有粘性标题的 ui5-table Web 组件的 Angular 虚拟滚动
- java - 如何在扩展映射超类的springboot中为实体类制作构造函数
- jbpm - 运行 jBPM 7.48.0 示例应用程序时出错
- vue.js - 进入和离开类的Vue过渡不起作用
- python-3.x - 如何压缩文件夹中的文件python
- python - 正则表达式 findall 函数未按预期工作
- java - Java 如何将字符串转换为列表?
- python-3.x - 计算自定义 BERT 模型的准确性的问题