sql >> Databáze >  >> NoSQL >> MongoDB

Jak používat proměnné s MongoDB $lookup

Pokud auta a motorky nemají společné ID, můžete je postupně vyhledat v samostatných polích a zkombinovat je s $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,
  }}
]);

Jinak budete muset použít $facet pro filtrování vozidel podle typu před vyhledáním:

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. Dotazujte se na konkrétní pole mongoDB pomocí node.js

  2. kde je výchozí instalační adresář pro mongodb

  3. proč nemůžu spustit mongodb

  4. Aplikace funguje ve vývoji, ale ne při nasazení do heroku