sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB 4.4.4 ændringsstrøm returnerer alle dokumentopdateringer i stedet for filtreret tilstand, der matcher én?

jeg var i stand til at få det til at fungere med følgende:

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);
        }
    }
}

hvis du ikke har noget imod at bruge et bibliotek, kan al ovenstående sang og dans undgås, og tingene kan destilleres ned til følgende:

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);
};

tjek MongoDB.Entities docs for mere info. ansvarsfraskrivelse:Jeg er forfatteren til det bibliotek.




  1. MongoDB Node findone, hvordan man håndterer ingen resultater?

  2. 20 bemærkelsesværdig forskel mellem Hadoop 2.x og Hadoop 3.x

  3. Sådan tilføjer du værdier til et bson.D-objekt

  4. Mongoose opdatere underdokument, hvis det findes