मुझे यह पता लगाने में थोड़ा समय लगा क्योंकि यह किसी भी आधिकारिक दस्तावेज (या कहीं और) में उल्लेखित नहीं है। हालाँकि मुझे यह उनके इश्यू ट्रैकर पर मिला, जो बताता है कि पोजिशनल ऑपरेटर का उपयोग कैसे करें $
C# 2.0 ड्राइवर के साथ।
यह वही करना चाहिए जो आप चाहते हैं:
public void UpdateItemTitle(string agendaId, string itemId, string title){
var filter = Builders<TempAgenda>.Filter.Where(x => x.AgendaId == agendaId && x.Items.Any(i => i.Id == itemId));
var update = Builders<TempAgenda>.Update.Set(x => x.Items[-1].Title, title);
var result = _collection.UpdateOneAsync(filter, update).Result;
}
ध्यान दें कि आपका Item.Single()
क्लॉज को Item.Any()
में बदल दिया गया है और फ़िल्टर परिभाषा में ले जाया गया।
[-1]
या .ElementAt(-1)
जाहिरा तौर पर विशेष रूप से व्यवहार किया जाता है (वास्तव में सब कुछ <0) और स्थितीय ऑपरेटर के साथ प्रतिस्थापित किया जाएगा $
।
उपरोक्त का इस प्रश्न में अनुवाद किया जाएगा:
db.Agenda.update({ AgendaId: 1, Items.Id: 1 }, { $set: { Items.$.Title: "hello" } })