sql >> データベース >  >> NoSQL >> MongoDB

mongodbで変更されたドキュメントの通知を受け取る

    mongodb 3.6以降、アクションを変更ストリームにフックできるようになりました。これにより、特定のコレクションの変更(クルード操作など)をリッスンするために使用できる調整可能なカーソルが得られます。

    変更ストリームはoplogの上に構築され、oplogを使用しているすべてのユーザーがアクセスできます。変更ストリームは再開可能であり、$ match、$projectなどの集計演算子でも使用できます...

    詳細はこちら(Javaの例):http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/

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

    C#で作業している場合は、ここに例があります:

        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. インデックスが使用されているかどうかを確認するにはどうすればよいですか

    2. SQLで文字列と数値を連結する

    3. MongoDBのestimatedDocumentCount()

    4. MongoDB insertMany()