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