sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoose slutter sig til to samlinger og får refererede data i to ejendomme

Du kan prøve,

  • $addFields at lave et unikt array kaldet userIds danner begge arrays followers og followings , $setUnion for at få unikke id'er,
  • $lookup med brugerindsamling
  • $project for at vise felter,
    • followers få fullName, $map for at gentage løkke af followers og få navnet på followerId fra brugerarray ved hjælp af $reduce og $cond
    • followings få fuldnavn, $map for at gentage løkke af followings og få navnet på followingId fra brugerarray ved hjælp af $reduce og $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"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])

Legeplads



  1. Django serialisering til JSON fejl:'MetaDict' objekt har ingen attribut 'concrete_model'

  2. Hvordan kan man se eventuelle ændringer (ny række) i mongoDB?

  3. Referencefejl er ikke smidt fra MongoDB-tilbagekald

  4. Fejl ved oprettelse af bean med navnet 'personRepository':Påkaldelse af init-metoden mislykkedes; indlejret undtagelse er com.mongodb.util.JSONParseException: