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

MongoDB$lookupで変数を使用する方法

    車とバイクに共通のIDがない場合は、別々の配列で順番に検索し、それらを $ 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,
      }}
    ]);
    

    それ以外の場合は、 $facet を使用する必要があります。 ルックアップの前にタイプで車両をフィルタリングするには:

    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. マングースの種まきスクリプトを約束に変える

    2. EntityFrameworkとMongoDb

    3. Mongodbドット表記ワイルドカード?

    4. MongoEnginePointFieldのデータをフォーマットする方法