मैं MongoDb . की शुरुआत कर रहा हूँ

यहाँ मैंने दस्तावेज़ का उल्लेख किया है

{
"_id" : ObjectId("5e5bc292361b710c7727718e"),
"branch_id" : "BR5cc825dac42dac3aae49ff91",
"inventory" : [ 
    {
        "inventory_stock_id" : "MED344",
        "stock_name" : "Anacin123",
        "stock_point" : "27",
        "stock_type" : "Medicine",
        "batch" : [ 
            {
                "quantity" : 40,
                "manuf_date" : "10-01-2020",
                "exp_date" : "01-04-2020"
            }, 
            {
                "quantity" : 60,
                "manuf_date" : "15-02-2020",
                "exp_date" : "03-03-2020"
            }
        ]
    }
  ]
}

मैंने मान दिया है branch_id ="BR5cc825dac42dac3aae49ff91",inventory_stock_id = "MED344" और मात्रा 50 है

यह मेरी दी गई क्वेरी है लेकिन यह बैच की तुलना करता है:[ { },{ इस निर्देशिका की तुलना करें } ]

db.collection.update_many(
                                { "branch_id": "BR5cc825dac42dac3aae49ff91" },
                                { "$inc": {"inventory.$[item].batch.$[b].quantity": -50}},
                                array_filters= [
                                    {"item.inventory_stock_id": "MED344"},
                                    {"b.quantity": { "$gte": 50}}
                                ]
                                )

मेरी क्वेरी दी गई परिणाम है

"_id" : ObjectId("5e5bc292361b710c7727718e"),
"branch_id" : "BR5cc825dac42dac3aae49ff91",
"inventory" : [ 
    {
        "inventory_stock_id" : "MED344",
        "stock_name" : "Anacin123",
        "stock_point" : "27",
        "stock_type" : "Medicine",
        "batch" : [ 
            {
                "quantity" : 40,
                "manuf_date" : "10-01-2020",
                "exp_date" : "01-04-2020"
            }, 
            {
                "quantity" : 10,
                "manuf_date" : "15-02-2020",
                "exp_date" : "03-03-2020"
            }
        ]
    }
  ]
}

अपेक्षित परिणाम है

{
"_id" : ObjectId("5e5bc292361b710c7727718e"),
"branch_id" : "BR5cc825dac42dac3aae49ff91",
"inventory" : [ 
    {
        "inventory_stock_id" : "MED344",
        "stock_name" : "Anacin123",
        "stock_point" : "27",
        "stock_type" : "Medicine",
        "batch" : [ 
            {
                "quantity" : 0,
                "manuf_date" : "10-01-2020",
                "exp_date" : "01-04-2020"
            }, 
            {
                "quantity" : 50,
                "manuf_date" : "15-02-2020",
                "exp_date" : "03-03-2020"
            }
        ]
    }
  ]
}

मैं अपना अपेक्षित परिणाम कैसे प्राप्त कर सकता हूं कोई मेरी मदद करें

0
arun kumar 3 मार्च 2020, 11:28
{"b.quantity": { "$gte": 50}} शर्त हटाएं
 – 
Valijon
3 मार्च 2020, 11:41
अगर मैं {"b.quantity": { "$gte": 50}} को हटा दूं तो यह कंडीशन { "$inc": {"inventory.$[item].batch.$[b].quantity": -50} } त्रुटि करता है
 – 
arun kumar
3 मार्च 2020, 11:57
$[b].quantity को $[].quantity में बदलने और शर्त हटाने का प्रयास करें
 – 
Valijon
3 मार्च 2020, 12:04
अगर मैं {"b.quantity": { "$gte": 50}} कंडीशन हटा दूं तो यह मात्रा:-10 और मात्रा:10 देता है
 – 
arun kumar
3 मार्च 2020, 12:14
मुझे आपकी क्वेरी के परिणाम के नीचे एक समस्या का सामना करना पड़ा "एक बूल से $ घटाना दोगुना नहीं कर सकता"
 – 
arun kumar
3 मार्च 2020, 14:03

2 जवाब

इस समाधान का उपयोग करें:

db.collection.update(
    { "branch_id": "BR5cc825dac42dac3aae49ff91" },
    [{ "$set": {
        inventory: {
            $map: {
                input: "$inventory",
                as : 'inv',
                in: {
                    "inventory_stock_id" : "$$inv.inventory_stock_id",
                    "stock_name" : "$$inv.stock_name",
                    "stock_point" : "$$inv.stock_point",
                    "stock_type" : "$$inv.stock_type",
                    "batch" : {$cond:[{$ne:["$$inv.inventory_stock_id", "MED344"]}, "$$inv.batch", {
                        $map:{
                            input:"$$inv.batch",
                            as:"batch",
                            in:{
                                "quantity" : {$cond:[{$lt:["$$batch.quantity", 50]}, 0, 50]},
                                "manuf_date" : "$$batch.manuf_date",
                                "exp_date" : "$$batch.exp_date"
                            }
                        }
                    }]}
                }
            }
        }
    }}],
    {multi:true}
)

मैं इससे आसान समाधान ढूंढ रहा हूं

0
Valijon 3 मार्च 2020, 14:37
उपरोक्त क्वेरी "बैच" उत्पन्न करती है: [{"मात्रा": 0.0, "manuf_date": "10-01-2020", "exp_date": "01-04-2020"}, {"मात्रा": 10.0, "manuf_date" " :"15-02-2020",,"exp_date" : "03-03-2020" } ]
 – 
arun kumar
3 मार्च 2020, 14:24
कृपया फिर से जांचें
 – 
Valijon
3 मार्च 2020, 14:38
बैच दूसरी मात्रा इसे घटाया नहीं गया डिफ़ॉल्ट सेट 50
 – 
arun kumar
4 मार्च 2020, 08:35

यहाँ अजगर का उपयोग करने का उल्लेख किया गया है और यह कई शब्दकोश क्षेत्रों को अपडेट करेगा जो मैं उम्मीद करता हूं

 inventory_item_update = self.collection.find({'branch_id':"BR5cc825dac42dac3aae49ff91", "inventory.inventory_stock_id": "MED344"}) 
 quantity = 50
 update_query ={}
 if inventory_item_update:
    for cursor in inventory_item_update:
        for batch in cursor['inventory'][0]['batch']:
            if batch['quantity'] <= quantity:
               quantity = quantity-batch['quantity']
               batch['quantity'] =0
            if batch['quantity'] >= quantity:
                  quantity = batch['quantity'] -quantity
                  batch['quantity'] = quantity
         update_query = cursor
    update_result=self.collection.save(update_query)
0
arun kumar 5 मार्च 2020, 16:24