MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB लिंक्ड ऑब्जेक्ट के साथ कुल पाइपलाइन

आपको बस अपने दूसरे $addFields . में फ़िल्टर जोड़ने की आवश्यकता है चरण कि आप फ़िल्टर कर रहे हैं roomTypes और बाकी चरण समान होंगे, बस नीचे दिए गए नए कोड को स्टार्ट कमेंट और एंड कमेंट से हाइलाइट करें,

  • $reduce roomDetails.description . के लूप को पुनरावृत्त करने के लिए सरणी $cond स्थानीय से मिलान करने के लिए और मिलान परिणाम को मूल्य पर लौटाने के लिए, roomDetails.title के लिए समान प्रक्रिया सरणी, और $mergeObjects . का उपयोग करके इस 2 अद्यतन फ़ील्ड को वर्तमान ऑब्जेक्ट के साथ मर्ज करें
  {
    $addFields: {
      roomTypes: {
        $map: {
          input: "$roomTypes",
          in: {
            $mergeObjects: [
              "$$this",
              {

शुरू करें:

                roomDetails: {
                  $mergeObjects: [
                    "$$this.roomDetails",
                    {
                      description: {
                        $reduce: {
                          input: "$$this.roomDetails.description",
                          initialValue: "",
                          in: {
                            $cond: [
                              { $eq: ["$$this.locale", "pl"] },
                              "$$this.value",
                              "$$value"
                            ]
                          }
                        }
                      },
                      title: {
                        $reduce: {
                          input: "$$this.roomDetails.title",
                          initialValue: "",
                          in: {
                            $cond: [
                              { $eq: ["$$this.locale", "pl"] },
                              "$$this.value",
                              "$$value"
                            ]
                          }
                        }
                      }
                    }
                  ]
                },

~समाप्त~

                available: {
                  $reduce: {
                    input: "$$this.capacity",
                    initialValue: 0,
                    in: {
                      $cond: [
                        { $eq: ["$$this.cruiseID", "$cruiseID"] },
                        "$$this.available",
                        "$$value"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }

खेल का मैदान

सामान्य विकल्प में मैंने आपके संदर्भ प्रश्न में उत्तर दिया है। आप समान फ़ंक्शन का उपयोग कर सकते हैं, जैसे,

function languageFilter(inputField, locale) {
  return {
    $reduce: {
      input: inputField,
      initialValue: "",
      in: {
        $cond: [{ $eq: ["$$this.locale", locale] }, "$$this.value", "$$value"]
      }
    }
  };
}

आपकी अंतिम क्वेरी होगी:

let locale = "pl";
db.cs.aggregate([
  { $match: { cID: "00001" } },
  {
    $lookup: {
      from: "rooms",
      localField: "roomTypes.roomID",
      foreignField: "roomID",
      as: "roomTypes"
    }
  },
  {
    $addFields: {
      title: languageFilter("$title", locale),
      description: languageFilter("$description", locale),
      roomTypes: {
        $map: {
          input: "$roomTypes",
          in: {
            $mergeObjects: [
              "$$this",
              {
                roomDetails: {
                  $mergeObjects: [
                    "$$this.roomDetails",
                    {
                      description: languageFilter("$$this.roomDetails.description", locale),
                      title: languageFilter("$$this.roomDetails.title", locale)
                    }
                  ]
                },
                available: {
                  $reduce: {
                    input: "$$this.capacity",
                    initialValue: 0,
                    in: {
                      $cond: [
                        { $eq: ["$$this.cruiseID", "$cruiseID"] },
                        "$$this.available",
                        "$$value"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      _id: 0,
      "roomTypes": { _id: 0 },
      "roomTypes.capacity": 0
    }
  }
]);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. कस्टम _id फ़ील्ड Django MongoDB MongoEngine

  2. एम्बर जेएस एसोसिएशन एक्सेस बैकएंड नोडज नेवला

  3. Update.one ReactiveMongo के साथ fetchNewObject का उपयोग कैसे करें?

  4. PHP और MongoDB के साथ शुरुआत करना

  5. स्प्रिंग बूट + अपाचे ऊंट + मोंगोडब एकीकरण मुद्दा