Vanaf mongodb 3.6 kun je nu acties aan de wijzigingsstroom koppelen. Dit geeft je een staartbare cursor die je kunt gebruiken om te luisteren naar veranderingen (bijvoorbeeld ruwe bewerkingen) op een bepaalde collectie.
De wijzigingsstroom is bovenop de oplog gebouwd en is toegankelijk voor alles wat de oplog gebruikt. Wijzigingsstromen kunnen worden hervat en kunnen ook worden gebruikt met aggregatie-operators zoals $match, $project...
Meer info hier (Java-voorbeeld):http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/
En hier is het fragment van 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();
Als u in C# werkt, vindt u hier voorbeelden:
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);