Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb';s聚合查找管道条件集合_Mongodb - Fatal编程技术网

mongodb';s聚合查找管道条件集合

mongodb';s聚合查找管道条件集合,mongodb,Mongodb,当我写查询时,我必须检索所有学校的男生的详细信息,该查询同时检索男生和女生 let result = await schoolModel.aggregate([ { $match: { isdeleted: false } }, { $lookup: { localField: "_id", from: "students", foreignField: "schl_id", as: "studentsList" },

当我写查询时,我必须检索所有学校的男生的详细信息,该查询同时检索男生和女生

      let result = await schoolModel.aggregate([
        { $match: { isdeleted: false } },
        { $lookup: {
                localField: "_id", from: "students", foreignField: "schl_id", as: "studentsList" },
        { $project: { "studentsList.isdeleted": 1, "studentsList.gender": 1, "studentsList._id": 1 } },
        { $match: { "studentsList.isdeleted": false, "studentsList.gender": "Male" } }
    ]);

在上面的查询中,它没有检查匹配条件,即..,studentsList.isdeleted&gender有人能帮我找出上面查询的错误吗

$lookup返回一个数组,这意味着当您使用匹配查询时,如果数组包含与您的条件匹配的文档,它将返回true

要检索您想要的结果,您有两种选择:

  • studentList
    匹配每个文档,然后分组以重新构造结果
  • 使用Mongo的v3.6+的更优雅的方式
  • 它看起来有点像这样:

    let result = await schoolModel.aggregate([
            {
                $match: {
                    isdeleted: false
                }
            },
            {
                $lookup:
                    {
                        from: "students",
                        let: {school_id: "$_id"},
                        pipeline: [
                            {
                                $match:
                                    {
                                        $expr:
                                            {
                                                $and:
                                                    [
                                                        {$eq: ["$schl_id", "$$school_id"]},
                                                        {$eq: ["$gender", "Male"]},
                                                        {$eq: ["$isdeleted", false]}
                                                    ]
                                            }
                                    }
                            }
                        ],
                        as: "studentList"
                    }
            },
            {
                $match: {
                    "studentList.0": {$exists: true}
                }
            }
        ]);