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

Hvordan samles indlejret opslagsmatrix i mongoose?

  • $lookup med user indsamling
  • $unwind dekonstruer id_user matrix
  • $lookup med language indsamling og returnering på language felt
  • $map for at gentage udseendet af id_user.language matrix
  • $reduce at gentage sløjfe af language array returneret fra samling, tjek tilstanden hvis language_id match og returner derefter 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"
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
])

Legeplads




  1. Node.js, Socket.io, Redis pub/sub høj lydstyrke, lav latency vanskeligheder

  2. Hvorfor forbindelse til MongoDB fra Node.js er langsom

  3. Hvad betyder dokumentorienteret vs. nøgleværdi, når man taler om MongoDB vs. Cassandra?

  4. Hvordan man skriver en MongoDB $slice i golang