0
2つのコレクション:sights
とevents
があります。それらは次のようになります。MongoDB PullFilterとUpdateMany C#
//Sight document:
{
"_id" : ObjectId("5a14d93616016e2bb8796ccf"),
"RelatedEventsId" : [
ObjectId("5a14d93616016e2bb8796cd0"),
ObjectId("5a14d93616016e2bb8796cd1")
]
//other stuff
}
//Event document
{
"_id" : ObjectId("5a14d93616016e2bb8796cd0"),
"RelatedSightsId" : [
ObjectId("5a14d93616016e2bb8796ccf")
]
//other stuff
}
したがって、視力とイベントは多対多に関係しています。私が直面している問題は、特定の文書間の関係を更新することです。メソッドEditSight
で、提供されたnew-oneでデータベースの視力を更新したいと思います。私はidListToAdd
とidListToDelete
がRelatedEventsId
であることを発見しました。新しい関係を追加し、古いものをコレクションevents
で削除しました。
var pull = Builders<Event>.Update.PullFilter(p => p.RelatedSightsId, f => f == oldSight.Id);
var push = Builders<Event>.Update.Push(p => p.RelatedSightsId, new ObjectId(id));
EventCol.UpdateMany<Event>(x => idListToDelete.Contains(x.Id), pull);
EventCol.UpdateMany<Event>(x => idListToAdd.Contains(x.Id), push);
SightCol.ReplaceOne(SBuilder.Eq(x => x.Id, new ObjectId(id)), newSight);
プルがevent
コレクションからevent.RelatedSightsId
に古いのIdsを削除します。
プッシュは、にevent
コレクションに新しいIDを追加します。
また、上記のコードは、例外を与える:大量の書き込みでこのアップデートを行うにはいいだろう
System.InvalidOperationException: {document} is not supported.
またなどの追加。
ありがとうございます!