首页 > 解决方案 > 聚合多个查找的匹配字段

问题描述

我有一个查询要查找另外两个集合,一个包含有关学生的信息,另一个包含有关班级的信息。我正在运行查询的集合包含有关活动的信息。

事情是:我无法比较我已经完成的第二次查找中的字段(在类上),由于某种原因,我添加的字段似乎也不适用于该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"}

标签: javascriptmongodbmongodb-queryaggregate-functionslookup

解决方案


推荐阅读