sql >> Base de Datos >  >> NoSQL >> MongoDB

La actualización del controlador Mongodb C# todos los elementos del subarreglo falló cuando el arreglo está vacío

como dice el mensaje de error, solo puede ejecutar operaciones de actualización de matriz en un campo que es una matriz. si el campo tiene un valor de null o no existe, la actualización también fallará.

la solución más simple es convertir el campo en una matriz vacía al guardar los documentos para que se vea así en la base de datos:

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

que se puede lograr fácilmente dando a su propiedad C# un valor predeterminado como este:

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

programa de prueba:

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