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

Mongodb C#ドライバーは、配列が空のときにすべてのサブ配列要素を更新できませんでした

    エラーメッセージにあるように、配列であるフィールドに対してのみ配列更新操作を実行できます。フィールドの値がnullの場合 または存在しない場合、更新も失敗します。

    最も簡単な解決策は、ドキュメントを保存するときにフィールドを空の配列にして、dbで次のように表示することです。

    {
        "_id": ObjectId("5df9af0e22bb051d0c25c936"),
        "Quotes": [ ]
    }
    

    これは、c#プロパティに次のようなデフォルト値を指定することで簡単に実現できます。

        public Quote[] Quotes { get; set; } = new Quote[0];
    

    テストプログラム:

    using MongoDB.Entities;
    using MongoDB.Entities.Core;
    
    namespace StackOverflow
    {
        public class Test : Entity
        {
            public string Name { get; set; }
            public Quote[] Quotes { get; set; } = new Quote[0];
        }
    
        public class Quote
        {
            public bool flag { get; set; }
            public string status { get; set; }
        }
    
        public class Program
        {
            private static void Main(string[] args)
            {
                new DB("test", "localhost");
    
                (new[] {
                    new Test { Name = "no quotes"},
                    new Test { Quotes = new[]{
                        new Quote { flag = true, status = "PROCESSED" } } },
    
                    new Test { Quotes = new[]{
                        new Quote { flag = true, status = "NOT-PROCESSED" },
                        new Quote { flag = true, status = "NOT-PROCESSED" }
                    }}
                }).Save();
    
                var field = Prop.PosAll<Test>(t => t.Quotes[0].flag);
    
                DB.Update<Test>()
                  .Match(_ => true)
                  .Modify(b => b.Set(field, false))
                  .Execute();
            }
        }
    }



    1. Classic ASP(VBScript)でのRedis

    2. 存在しない場合は挿入する方法、そうでない場合はmongoengineで更新する方法は?

    3. mongodb集計フレームワークを使用して頻度を計算する

    4. Docker-composeとmongoDB:互換性のあるバージョンでWiredTigerを起動できませんでしたか?