MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Erhalten Sie eine Benachrichtigung für geänderte Dokumente in mongodb

Ab mongodb 3.6 können Sie jetzt Aktionen mit dem Änderungsstrom verknüpfen. Dadurch erhalten Sie einen anpassbaren Cursor, mit dem Sie Änderungen (z. B. Crud-Operationen) an einer bestimmten Sammlung überwachen können.

Der Änderungsstrom baut auf dem Oplog auf und ist für alle zugänglich, die das Oplog verwenden. Änderungsströme sind wiederaufnehmbar und können auch mit Aggregationsoperatoren wie $match, $project...

verwendet werden

Weitere Informationen hier (Java-Beispiel):http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/

Und hier ist das Snippet von 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();

Wenn Sie in C# arbeiten, finden Sie hier Beispiele:

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