MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Obter notificação para documentos alterados no mongodb


A partir do mongodb 3.6, agora você pode vincular ações ao fluxo de mudança. Isso fornece um cursor tailable que você pode usar para ouvir as alterações (por exemplo, operações crud) em uma coleção específica.

O fluxo de mudança é construído em cima do oplog e é acessível para qualquer coisa que esteja usando o oplog. Os fluxos de mudança são recuperáveis ​​e também podem ser usados ​​com operadores de agregação como $match, $project...

Mais informações aqui (exemplo Java):http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/

E aqui está o trecho de https://www.mongodb.com/mongodb-3.6 (Java):
// 1. The database for reactive, real-time applications
 MongoClient mongoClient;

// Create a new MongoClient with a MongoDB URI string.
if (args.length == 0) {
// Defaults to a localhost replicaset on ports: 27017, 27018, 27019
  mongoClient = new MongoClient(new
  MongoClientURI("mongodb://localhost:27017,localhost:27018,localhost:27019"));
} else {
  mongoClient = new MongoClient(new MongoClientURI(args[0]));
}

// Select the MongoDB database.
MongoDatabase database = mongoClient.getDatabase("testChangeStreams");
database.drop();
sleep();

// Select the collection to query.
MongoCollection<Document> collection = database.getCollection("documents");

// Create the change stream cursor.
MongoCursor<Document> cursor = collection.watch().iterator();

Se você estiver trabalhando em C#, exemplos podem ser encontrados aqui:
    var inventory = database.GetCollection<BsonDocument>("inventory");

    var document = new BsonDocument("x", 1);
    inventory.InsertOne(document);
    new Thread(() =>
    {
        Thread.Sleep(TimeSpan.FromMilliseconds(100));
        var filter = new BsonDocument("_id", document["_id"]);
        var update = "{ $set : { x : 2 } }";
        inventory.UpdateOne(filter, update);
    })
    .Start();

    // Start Changestream Example 2
    var options = new ChangeStreamOptions { FullDocument = ChangeStreamFullDocumentOption.UpdateLookup };
    var enumerator = inventory.Watch(options).ToEnumerable().GetEnumerator();
    enumerator.MoveNext();
    var next = enumerator.Current;
    enumerator.Dispose();
    // End Changestream Example 2

    var expectedFullDocument = document.Set("x", 2);
    next.FullDocument.Should().Be(expectedFullDocument);