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

マングースは2つのコレクションを結合し、2つのプロパティで参照データを取得します

    試すことができます

    • $addFields userIdsという一意の配列を作成します 両方の配列を形成するfollowers およびfollowings$setUnion 一意のIDを取得するには
    • $lookup ユーザーコレクション付き
    • $project フィールドを表示するには、
      • followers fullName、$ mapを取得して、followersのループを繰り返します followerIdの名前を取得します $reduceを使用してユーザー配列から および$cond
      • followings fullName、$ mapを取得して、followingsのループを繰り返します followingIdの名前を取得します $reduceを使用してユーザー配列から および$cond
    db.followings.aggregate([
      {
        $addFields: {
          userIds: {
            $setUnion: [
              {
                $map: {
                  input: "$followers",
                  in: "$$this.followerId"
                }
              },
              {
                $map: {
                  input: "$followings",
                  in: "$$this.followingId"
                }
              }
            ]
          }
        }
      },
      {
        $lookup: {
          from: "users",
          localField: "userIds",
          foreignField: "_id",
          as: "users"
        }
      },
      {
        $project: {
          userId: 1,
          followers: {
            $map: {
              input: "$followers",
              as: "f",
              in: {
                $mergeObjects: [
                  "$$f",
                  {
                    fullName: {
                      $reduce: {
                        input: "$users",
                        initialValue: "",
                        in: {
                          $cond: [
                            { $eq: ["$$this._id", "$$f.followerId"] },
                            "$$this.fullName",
                            "$$value"
                          ]
                        }
                      }
                    }
                  }
                ]
              }
            }
          },
          followings: {
            $map: {
              input: "$followings",
              as: "f",
              in: {
                $mergeObjects: [
                  "$$f",
                  {
                    fullName: {
                      $reduce: {
                        input: "$users",
                        initialValue: "",
                        in: {
                          $cond: [
                            { $eq: ["$$this._id", "$$f.followingId"] },
                            "$$this.fullName",
                            "$$value"
                          ]
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      }
    ])
    

    遊び場



    1. mongodbの値をデクリメントします

    2. MongoDBをSolrと統合するにはどうすればよいですか?

    3. SocketException:アドレスはすでに使用されていますMONGODB

    4. 3つのコレクションを使用してmongodbで結合を実行しますか?