Od wersji mongodb 3.6 można teraz przechwytywać akcje do strumienia zmian. W ten sposób można ustawić kursywę, której można użyć do odsłuchiwania zmian (np. Operacji crud) na konkretnej kolekcji.
Strumień zmian jest zbudowany na wierzchu oploga i jest dostępny dla wszystkiego, co używa oploga. Zmiany strumienie są wznawialną i może być również używany z operatorów agregacji takich jak $, $ meczu projektu ...
Więcej informacji tutaj (przykład Java): http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/
A oto fragment z 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();
Jeśli pracujesz w C#, przykłady można znaleźć here:
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);
Ten link jest już martwy. – captncraig
Dzięki za wskazanie. Naprawiłem to w poście. – Sid