jak mówi komunikat o błędzie, możesz uruchamiać operacje aktualizacji tablicy tylko na polu, które jest tablicą. jeśli pole ma wartość null
lub nie istnieje, aktualizacja również się nie powiedzie.
najprostszym rozwiązaniem jest uczynienie tego pola pustą tablicą podczas zapisywania dokumentów, tak aby wyglądało tak w bazie danych:
{
"_id": ObjectId("5df9af0e22bb051d0c25c936"),
"Quotes": [ ]
}
co można łatwo osiągnąć, nadając swojej właściwości c# wartość domyślną, na przykład:
public Quote[] Quotes { get; set; } = new Quote[0];
program testowy:
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();
}
}
}