javascript - 聚合多个查找的匹配字段
问题描述
我有一个查询要查找另外两个集合,一个包含有关学生的信息,另一个包含有关班级的信息。我正在运行查询的集合包含有关活动的信息。
事情是:我无法比较我已经完成的第二次查找中的字段(在类上),由于某种原因,我添加的字段似乎也不适用于该project
字段。
这是我的查询:
[
{"$lookup":{
"from":"students",
"localField":"class_id",
"foreignField":"classes_registered",
"as": "std"
}},
{"$unwind":"$std"},
{"$addFields":{"id_cls":{"$toString":"cls._id"},
"cls_name":"$$cls.name"
}},
{"$lookup":{
"from":"classes",
"localField":"class_id",
"foreignField":"id_cls",
"as": "cls"
}},
{"$unwind":"$std"},
{"$match":{
"$expr":{
"$and":[{
"$eq":["$std.email", filters["email"]]
},
{
"$eq":["$cls.name", filters["class_name"]]},
]
}
}
},
{"$project":{
"_id":0,
"cls.name":1,
"title":1,
"info":1,
"date_start":1,
"date_final":1,
"list":1
}}
]
“cls.name”在查询的响应中始终显示为“[]”,并且
"$eq":["$cls.name", filters["class_name"]},
也比不上任何东西。
学生收藏样本:
{"_id":{"$oid":"60e3bfef0046de182072361d"},
"name":"matheus",
"date":{"$date":"2021-07-06T02:29:03.974Z"},
"email":"math@math",
"classes_registered":["60b4753f7976fb83300918f0","60b477557976fb83300918f2"]}
类集合样本:
{"_id":{"$oid":"60b477557976fb83300918f2"},
"name":"desenho",
"teachers":["60b474937976fb83300918f1","60b474937976fb83300918ee"],
"date":{"$date":"2021-05-31T05:42:45.232Z"}}
classes_activities 示例:
{"_id":{"$oid":"60e4c88ee19fb3797390b3f9"},
"title":"Trabalho Discente Efetivo II",
"info":"Desenhar em perspectiva cavallera a formiga apresentada em aula",
"date_start":{"$date":"2021-07-06T02:00:00.000Z"},
"date_final":{"$date":"2022-07-06T02:00:00.000Z"},
"list":1,
"class_id":"60b477557976fb83300918f2"}
解决方案
推荐阅读
- javascript - 如何在 JavaScript 中将单维对象转换为多维对象?
- gradle - Gradle 启动的 TestNG 测试在套件而不是类中按优先级运行
- c++ - 使用 DDA 绘制线条
- vb.net - 绕过 308 永久重定向
- ethereum - 从特定区块分叉实际主网
- azure-devops - 如何使用管道将 Azure 代理标记为离线?
- apache-kafka - KSQLDB:按字段分组事件
- c# - C# 防火墙规则不适用于我的 .exe 文件
- mysql - 具有多行的 SQL 子查询
- jenkins - 如何将 cron 作业配置为每周每 30 分钟运行一次,周六和周日仅每 2 小时运行一次?