như thông báo lỗi cho biết, bạn chỉ được phép chạy các hoạt động cập nhật mảng trên một trường là một mảng. nếu trường có giá trị null
hoặc không tồn tại, cập nhật cũng sẽ không thành công.
giải pháp đơn giản nhất là đặt trường thành một mảng trống khi lưu tài liệu để nó trông giống như thế này trong db:
{
"_id": ObjectId("5df9af0e22bb051d0c25c936"),
"Quotes": [ ]
}
có thể dễ dàng đạt được bằng cách đặt thuộc tính c # của bạn một giá trị mặc định như sau:
public Quote[] Quotes { get; set; } = new Quote[0];
chương trình thử nghiệm:
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();
}
}
}