db.getCollection('test').update({
  "b_id": "3"
},
{
      "$push": {"books": {
        "status": "available",
        "shelf_id": "$shelf_id",
        "rack_no": "$rack_no",
        "book_id": new ObjectId()
      }
  }
})

शेल्फ_आईडी और रैक_नो पहले से ही दस्तावेज़ में उपलब्ध हैं। यहां, मुझे सरणी "किताबें" बनाने की आवश्यकता है जिसमें स्थिति, शेल्फ_आईडी, रैक_नो और बुक_आईडी शामिल है।

मैं इस मामले में शेल्फ_आईडी और रैक_नो का मौजूदा मूल्य प्राप्त करने में सक्षम नहीं हूं। यह दस्तावेज़ से मूल्य के बजाय $rack_id को स्ट्रिंग के रूप में मानता है। कृपया कोई रास्ता सुझाएं।

0
Mano 16 जुलाई 2020, 17:16

1 उत्तर

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

हां, आप इसे मोंगोडीबी 4.2 में अपडेट के पाइपलाइन फॉर्म का उपयोग करके कर सकते हैं, लेकिन $ पुश के साथ नहीं।

अद्यतन करने के लिए दूसरे तर्क के रूप में पाइपलाइन चरणों की एक सरणी पास करना आपको एकत्रीकरण ऑपरेटरों का उपयोग करने की अनुमति देगा।

$push एग्रीगेशन ऑपरेटर व्यवहार करता है $push अपडेट ऑपरेटर से बहुत अलग , इसलिए एक पाइपलाइन में $set का उपयोग $concatArrays के साथ करें, जैसे:

db.getCollection('test').update({
  "b_id": "3"
},
[{$set:
    {
      books: {$concatArrays:[
                "$books",
                [{
                  "status": "available",
                  "shelf_id": "$shelf_id",
                  "rack_no": "$rack_no",
                  "book_id": new ObjectId()
                }]
      ]}
    }
}])
1
Joe 17 जुलाई 2020, 08:30