微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

聚合和 $lookup

如何解决聚合和 $lookup

我在 MongoDB 中有两个集合,我想从中生成一个报告。采集数据如下 学生

import os
import zipfile
import io


def zipfiles(filenames):
    zip_filename = "archive.zip"

    s = io.BytesIO()
    zf = zipfile.ZipFile(s,"w")

    for fpath in filenames:
        # Calculate path for file in zip
        fdir,fname = os.path.split(fpath)

        # Add file,at correct path
        zf.write(fpath,fname)

    # Must close zip for all contents to be written
    zf.close()

    # Grab ZIP file from in-memory,make response with correct MIME-type
    resp = Response(s.getvalue(),media_type="application/x-zip-compressed",headers={
        'Content-disposition': f'attachment;filename={zip_filename}'
    })

    return resp

活动

[
    {
        _id:"1",name:"stu 1",class: "7th"
    },{
        _id:"2",name:"stu 2",{
        _id:"3",class: "7th"
    }
]

我想使用聚合管道生成的报告如下,我对 $loockup 管道感到震惊。有人可以帮我解决这个问题吗?

学生报告

[
    {
        _id:"1",studentIds:["1","3"],taskName:"Craft work 1"
    },studentIds:["1"],taskName:"Craft work 2"
    }

]

解决方法

我假设活动中的 studentIds 字段应该是一个数组。它似乎是一个错字。如果是这样,您可以使用以下方法汇总所需的输出:

https://mongoplayground.net/p/UBE0oNWLBsR

db.students.aggregate([
  {
    $lookup: {
      "from": "activities","localField": "_id","foreignField": "studentIds","as": "tasks"
    }
  },{
    $addFields: {
      tasks: "$tasks.taskName"
    }
  }
])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。