MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Recevoir une notification pour les documents modifiés dans mongodb

À partir de mongodb 3.6, vous pouvez désormais connecter des actions au flux de modifications. Cela vous donne un curseur personnalisable que vous pouvez utiliser pour écouter les modifications (par exemple, les opérations crud) sur une collection particulière.

Le flux de modifications est construit au-dessus de l'oplog et est accessible à tout ce qui utilise l'oplog. Les flux de modifications peuvent être repris et peuvent également être utilisés avec des opérateurs d'agrégation tels que $match, $project...

Plus d'informations ici (exemple Java) :http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/

Et voici l'extrait 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();

Si vous travaillez en C#, des exemples peuvent être trouvés ici :

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