MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Aliran perubahan MongoDB 4.4.4 mengembalikan semua pembaruan dokumen daripada kondisi yang difilter yang cocok?

saya bisa membuatnya bekerja dengan yang berikut:

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

jika Anda tidak keberatan menggunakan perpustakaan, semua lagu dan tarian di atas dapat dihindari dan hal-hal dapat disaring menjadi berikut:

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

lihat MongoDB.Entities dokumen untuk info lebih lanjut. penafian:saya penulis perpustakaan itu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tidak Ada Hasil dengan Pencarian Teks MongoDB PHP

  2. Bagaimana cara membatalkan kueri yang sedang berjalan di shell MongoDB?

  3. Ulangi semua database Mongo

  4. menginstal driver Java MongoDB

  5. Apakah boleh menginisialisasi ekspor secara asinkron dalam modul node.js?