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

MongoDB 4.4.4変更ストリームは、フィルター処理された条件が一致するものではなく、すべてのドキュメント更新を返しますか?

    私はそれを次のもので動作させることができました:

    var options = new ChangeStreamOptions
    {
        FullDocument = ChangeStreamFullDocumentOption.UpdateLookup,
        BatchSize = 1
    };
    
    var filter = Builders<ChangeStreamDocument<UserInfo>>
        .Filter.Where(x =>
            x.OperationType == ChangeStreamOperationType.Update &&
            x.FullDocument.UserName.Contains("Alice"));
    
    filter &= Builders<ChangeStreamDocument<UserInfo>>.Filter.Exists("updateDescription.updatedFields.Password");
    
    var pipeline = new IPipelineStageDefinition[]
    {
        PipelineStageDefinitionBuilder.Match(filter)
    };
    
    using (var cursor = await collection.WatchAsync<ChangeStreamDocument<UserInfo>>(pipeline, options))
    {
        while (await cursor.MoveNextAsync())
        {
            foreach (var info in cursor.Current)
            {
                Console.WriteLine("Updated: " + info.FullDocument.UserName);
            }
        }
    }
    

    ライブラリを使用してもかまわない場合は、上記の歌やダンスをすべて回避でき、次のようにまとめることができます。

    var watcher = DB.Watcher<UserInfo>("on-alice-updates-password");
    
    watcher.Start(
        eventTypes: EventType.Updated,
        filter: b => b.Where(x => x.FullDocument.UserName == "Alice") &
                     b.Exists("updateDescription.updatedFields.Password"));
    
    watcher.OnChanges += docs =>
    {
        foreach (var doc in docs)
            Console.WriteLine("Updated: " + doc.UserName);
    };
    

    MongoDB.Entities を確認してください 詳細については、ドキュメントをご覧ください。免責事項:私はそのライブラリの作成者です。




    1. Laravel-頻繁な更新でEloquentをキャッシュする

    2. ASP.NETCoreControllerでのStackExchange.Redisの使用

    3. node.jsを使用して、mongodbのネストされたサブドキュメントであるオブジェクト内の値をどのように合計しますか?

    4. 重複のないMongoDB挿入