मैं 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
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
{"b.quantity": { "$gte": 50}}
शर्त हटाएं$[b].quantity
को$[].quantity
में बदलने और शर्त हटाने का प्रयास करें