sql >> Database >  >> NoSQL >> MongoDB

Ontvang een melding voor gewijzigde documenten in mongodb

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


  1. Redis, wordt een onderwerp (pub/sub) altijd aan minstens één abonnee bezorgd?

  2. Hoe stel ik de leestime-out in op de node redis-client?

  3. hoe vul en aggregeer in dezelfde verklaring?

  4. Hoe krijg ik Spring-Data-MongoDB om mijn objecten te valideren?