ik kon het werkend krijgen met het volgende:
var options = new ChangeStreamOptions
{
FullDocument = ChangeStreamFullDocumentOption.UpdateLookup,
BatchSize = 1
};
var filter = Builders<ChangeStreamDocument<UserInfo>>
.Filter.Where(x =>
x.OperationType == ChangeStreamOperationType.Update &&
x.FullDocument.UserName.Contains("Alice"));
filter &= Builders<ChangeStreamDocument<UserInfo>>.Filter.Exists("updateDescription.updatedFields.Password");
var pipeline = new IPipelineStageDefinition[]
{
PipelineStageDefinitionBuilder.Match(filter)
};
using (var cursor = await collection.WatchAsync<ChangeStreamDocument<UserInfo>>(pipeline, options))
{
while (await cursor.MoveNextAsync())
{
foreach (var info in cursor.Current)
{
Console.WriteLine("Updated: " + info.FullDocument.UserName);
}
}
}
als je het niet erg vindt om een bibliotheek te gebruiken, kunnen alle bovenstaande liedjes en dansjes worden vermeden en kunnen dingen worden gedestilleerd tot het volgende:
var watcher = DB.Watcher<UserInfo>("on-alice-updates-password");
watcher.Start(
eventTypes: EventType.Updated,
filter: b => b.Where(x => x.FullDocument.UserName == "Alice") &
b.Exists("updateDescription.updatedFields.Password"));
watcher.OnChanges += docs =>
{
foreach (var doc in docs)
Console.WriteLine("Updated: " + doc.UserName);
};
bekijk MongoDB.Entities docs voor meer info. disclaimer:ik ben de auteur van die bibliotheek.