A partir de mongodb 3.6, ahora puede conectar acciones al flujo de cambios. Esto le proporciona un cursor disponible que puede usar para escuchar los cambios (por ejemplo, operaciones crud) en una colección en particular.
La secuencia de cambio está construida en la parte superior del oplog y está accesible para todo lo que esté utilizando el oplog. Cambio corrientes son resumable y también se puede utilizar con los operadores de agregación como $ partido, proyecto ... $
Más información aquí (Java ejemplo): http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/
Y aquí está el fragmento 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 está trabajando en C#, se pueden encontrar ejemplos 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);
Ese enlace está muerto ahora. – captncraig
Gracias por señalarlo. Lo he arreglado en la publicación. – Sid