公式ドキュメント(または他の場所)のいずれにも言及されていないようであるため、これを理解するのにしばらく時間がかかりました。ただし、これは、位置演算子$
の使用方法を説明する課題追跡システムで見つかりました。 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" } })