som fejlmeddelelsen siger, har du kun tilladelse til at køre array-opdateringsoperationer på et felt, der er et array. hvis feltet har værdien null
eller ikke eksisterer, vil opdateringen også mislykkes.
den enkleste løsning er at gøre feltet til et tomt array, når du gemmer dokumenterne, så det ser sådan ud i db:
{
"_id": ObjectId("5df9af0e22bb051d0c25c936"),
"Quotes": [ ]
}
hvilket nemt kan opnås ved at give din c#-egenskab en standardværdi som sådan:
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();
}
}
}