sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb C#-drivrutinsuppdateringen misslyckades med alla subarrayelement när arrayen är tom

som felmeddelandet säger, får du bara köra arrayuppdateringsoperationer på ett fält som är en array. om fältet har värdet null eller inte existerar, kommer uppdateringen också att misslyckas.

den enklaste lösningen är att göra fältet till en tom array när du sparar dokumenten så att det ser ut så här i db:

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

vilket enkelt kan uppnås genom att ge din c#-egenskap ett standardvärde som så:

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

testprogram:

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. Flask-SocketIO gör om prenumeration

  2. MongoDB-uppdateringMånga med villkorlig

  3. Infoga Array inuti ett objekt i MongoDB

  4. Trunkera en samling