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

Sådan bruges variabler med MongoDB $lookup

Hvis biler og cykler ikke har fælles ID'er, kan du sekventielt slå op i separate arrays og derefter kombinere dem med $setUnion :

db.vehicles.aggregate([
  {$lookup: {
      from: "cars",
      localField: "vehicleId",
      foreignField: "_id",
      as: "carDetails"
  }},
  {$lookup: {
      from: "bikes",
      localField: "vehicleId",
      foreignField: "_id",
      as: "bikeDetails"
  }},
  {$project: {
     vehicleType: 1,
     vehicleId: 1,      
     vehicleDetails:{$setUnion: [ "$carDetails", "$bikeDetails" ]}
  }},
  {$project: {
      carDetails:0,
      bikeDetails:0,
  }}
]);

Ellers skal du bruge $facet at filtrere køretøjer efter type før opslag:

db.vehicles.aggregate([
   {
     $facet: {
         "cars": [
            {$match: {"vehicleType": "cars"}},
            {$lookup: {
               from: "cars",
               localField: "vehicleId",
               foreignField: "_id",
               as: "vehicleDetails"
             }},
         ],
         "bikes": [
            {$match: {"vehicleType": "bikes"}},
            {$lookup: {
               from: "bikes",
               localField: "vehicleId",
               foreignField: "_id",
               as: "vehicleDetails"
             }}
         ]
     }
   },
   {$project: {all: {$setUnion: ["$cars", "$bikes"]}}},
   {$unwind: "$all"},
   {$replaceRoot: { newRoot: "$all" }}
])



  1. stop mongodb med at oprette dbs og samlinger dynamisk

  2. Returner kun matchede underdokumentelementer inden for et indlejret array

  3. Hvordan overfører man flere værdier, mens man uploader billede til serveren (File Upload med AngularJS og NodeJS)?

  4. Node.js og Mongodb - TypeError:undefined er ikke en funktion