सरणी से अंतिम/सभी ऑब्जेक्ट प्राप्त करने के लिए MongoDB क्वेरी

{
    WholeData:[
        {
            EnteredAmount:100,
            OverPayment:0,
            Type:"payment",
        },
        {
            EnteredAmount:200,
            OverPayment:0,
            Type:"payment",
        },
    ]
}

{
    WholeData:[
        {
            EnteredAmount:600,
            OverPayment:0,
            Type:"refund",
        },
        {
            EnteredAmount:400,
            OverPayment:0,
            Type:"refund",
        },
    ]
}

नमूना दस्तावेज़ इस तरह दिखते हैं
मैं एक प्रश्न लिखना चाहता हूं जिसके परिणामस्वरूप कुछ ऐसा हो यदि प्रकार धनवापसी है तो सभी सरणी वस्तुओं को धक्का/रखें अन्यथा केवल अंतिम अनुक्रमणिका ऑब्जेक्ट को धक्का/रखें। नमूना उत्पादन होना चाहिए

{
    WholeData:[

        {
            EnteredAmount:200,
            OverPayment:0,
            Type:"payment",
        },
    ]
}



{
    WholeData:[
        {
            EnteredAmount:600,
            OverPayment:0,
            Type:"refund",
        },
        {
            EnteredAmount:400,
            OverPayment:0,
            Type:"refund",
        },
    ]
}
0
Faizan Ahmed 9 सितंबर 2021, 14:28
यह ऐसा कुछ है जिसका आप किसी एक प्रश्न में अनुवाद नहीं कर सकते।
 – 
yoka791
9 सितंबर 2021, 15:14
यह पहले से ही एक लंबी क्वेरी है। यह ठीक है अगर यह कई पाइपलाइनों में किया जा सकता है
 – 
Faizan Ahmed
9 सितंबर 2021, 15:29

1 उत्तर

सबसे बढ़िया उत्तर

पहले हम होलडाटा के अंतिम तत्व को स्टोर करने के लिए एक और सरणी बनाते हैं यदि Type:"payment" फिर प्रोजेक्ट बनाएं और जांचें कि क्या WholeData खाली था मतलब टाइप रिफंड है अन्यथा भुगतान करें और हमारा परिणाम बनाएं इस एकत्रीकरण का उपयोग करें

db.collection.aggregate([
[
   {
    '$addFields': {
      'WholeDataP': {
        '$filter': {
          'input': '$WholeData', 
          'as': 'z', 
          'cond': {
            '$and': [
              {
                '$eq': [
                  {
                    '$indexOfArray': [
                      '$WholeData', '$$z'
                    ]
                  }, {
                    '$sum': [
                      {
                        '$size': '$WholeData'
                      }, -1
                    ]
                  }
                ]
              }, {
                '$ne': [
                  '$$z.Type', 'refund'
                ]
              }
            ]
          }
        }
      }
    }
  }, {
    '$project': {
      'WholeData': {
        '$cond': [
          {
            '$eq': [
              {
                '$size': '$WholeDataP'
              }, 0
            ]
          }, '$WholeData', '$WholeDataP'
        ]
      }
    }
  }
]
])
1
mohammad Naimi 10 सितंबर 2021, 09:26
आप इसे थोड़ा अलग समझते हैं यदि प्रकार धनवापसी है तो सभी सरणी तत्व अन्य बुद्धिमान अंतिम तत्व और प्रकार केवल धनवापसी के लिए भुगतान, चालान या कुछ अन्य तार हो सकते हैं, मुझे सभी तत्वों की आवश्यकता है और अन्य सभी के लिए मुझे अंतिम तत्व की आवश्यकता है
 – 
Faizan Ahmed
10 सितंबर 2021, 06:39
हाँ मैंने बिल्कुल वैसा ही किया। $eq को $ne में बदल दिया और धनवापसी कर दी और आपका परिवर्तन भी वही है। यदि आप क्वेरी के छोटे और हिस्से की व्याख्या कर सकते हैं तो उस संपूर्ण एकत्रीकरण में वास्तव में क्या हो रहा है। धन्यवाद।
 – 
Faizan Ahmed
10 सितंबर 2021, 14:16