sql >> データベース >  >> NoSQL >> MongoDB

マングースは2つのコレクションに参加し、参加したコレクションから特定のフィールドのみを取得します

    試すことができます

    • $lookup studentsと コレクション
    • $project 必須フィールドを表示するには、$map top10配列のループを繰り返し、内部で$reduceを使用します 学生からフルネームを取得し、$mergeObjectsを使用してtop10オブジェクトとマージします
    db.exams.aggregate([
      {
        $lookup: {
          from: "students",
          localField: "top10.studentId",
          foreignField: "_id",
          as: "students"
        }
      },
      {
        $project: {
          test: 1,
          students: {
            $map: {
              input: "$top10",
              as: "top10",
              in: {
                $mergeObjects: [
                  "$$top10",
                  {
                    fullname: {
                      $reduce: {
                        input: "$students",
                        initialValue: 0,
                        in: {
                          $cond: [
                            { $eq: ["$$this._id", "$$top10.studentId"] },
                            "$$this.fullname",
                            "$$value"
                          ]
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      }
    ])
    

    遊び場

    $unwindを使用できる2番目のオプション $lookupの前 、

    • $unwind top10を分解します 配列
    • $lookup studentsと コレクション
    • $addFields $arrayElemtAtを使用して、学生の配列をオブジェクトに変換します
    • $group _idで、学生の配列を作成し、必要なフィールドをプッシュします
    db.exams.aggregate([
      { $unwind: "$top10" },
      {
        $lookup: {
          from: "students",
          localField: "top10.studentId",
          foreignField: "_id",
          as: "students"
        }
      },
      { $addFields: { students: { $arrayElemAt: ["$students", 0] } } },
      {
        $group: {
          _id: "$_id",
          test: { $first: "$test" },
          students: {
            $push: {
              studentId: "$top10.studentId",
              score: "$top10.score",
              fullname: "$students.fullname"
            }
          }
        }
      }
    ])
    

    遊び場




    1. 長いクエリ文字列をMongoDBに直接解析する(SQLの場合と同じように)

    2. golangとmongodbでidで検索する方法

    3. ドキュメントの配列内のオブジェクトをどのように更新しますか(ネストされた更新)

    4. インデックスが機能していないことを確認します-MongoDB