sql >> Database >  >> NoSQL >> MongoDB

Mongodb C# driver update alle subarray-elementen mislukt wanneer array leeg is

zoals de foutmelding zegt, mag u alleen array-updatebewerkingen uitvoeren op een veld dat een array is. als het veld een waarde heeft van null of niet bestaat, zal de update ook mislukken.

de eenvoudigste oplossing is om van het veld een lege array te maken bij het opslaan van de documenten, zodat het er in de db als volgt uitziet:

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

wat gemakkelijk kan worden bereikt door uw c#-eigenschap een standaardwaarde te geven, zoals:

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

testprogramma:

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. find_by_sql equivalent voor mongoïde?

  2. MongoDB document invoegen of veld verhogen indien aanwezig in array

  3. Mongodb-telling versus findone

  4. MongoDB-connector voor PHP:tel documenten voor paginering