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

マングースでネストされたルックアップ配列を集約する方法は?

    • $lookup userを使用 コレクション
    • $unwind id_userを分解します 配列
    • $lookup languageを使用 languagesでの収集と返却 フィールド
    • $map id_user.languageの外観を繰り返す 配列
    • $reduce languagesのループを繰り返す コレクションから配列が返されました。language_idかどうかの条件を確認してください 一致してからnameを返します
    db.cvsubmit.aggregate([
      {
        $lookup: {
          from: "user",
          localField: "id_user",
          foreignField: "_id",
          as: "id_user"
        }
      },
      { $unwind: "$id_user" },
      {
        $lookup: {
          from: "language",
          localField: "id_user.language.language_id",
          foreignField: "_id",
          as: "languages"
        }
      },
      {
        $addFields: {
          languages: "$$REMOVE",
          "id_user.language": {
            $map: {
              input: "$id_user.language",
              as: "l",
              in: {
                _id: "$$l._id",
                level: "$$l.level",
                name: {
                  $reduce: {
                    input: "$languages",
                    initialValue: "",
                    in: {
                      $cond: [
                        { $eq: ["$$this._id", "$$l.language_id"] },
                        "$$this.name",
                        "$$value"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    ])
    

    遊び場




    1. Mongoクエリには時間がかかります。どうすればもっと速くできますか?

    2. MongoDBの別のフィールドにグループ化されたドキュメント全体で、フィールド内の文字列のインスタンス数をカウントしますか?

    3. 3レベルのMongoDBネストルックアップ

    4. Expires属性が削除されたドキュメントを知るにはどうすればよいですか?