sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizace ovladače Mongodb C# všech prvků podpole selhala, když je pole prázdné

jak říká chybová zpráva, operace aktualizace pole můžete spouštět pouze na poli, které je polem. pokud má pole hodnotu null nebo neexistuje, aktualizace také selže.

nejjednodušším řešením je udělat z pole prázdné pole při ukládání dokumentů tak, aby v db vypadalo takto:

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

čehož lze snadno dosáhnout tím, že své vlastnosti c# dáte výchozí hodnotu, jako je tato:

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

testovací program:

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. Jak vynutit kontrolu typu pro hodnotu dokumentu v MongoDB?

  2. Jak uděláte operátor SQL Like v mongoDB pomocí oficiálního ovladače C#

  3. MongoDB vytáhne prvek pole z kolekce

  4. Budou transakce fungovat s mongodb agregací $merge?