जैसे त्रुटि संदेश कहता है, आपको केवल उस फ़ील्ड पर सरणी अद्यतन संचालन चलाने की अनुमति है जो एक सरणी है। यदि फ़ील्ड का मान null
. है या मौजूद नहीं है, अपडेट भी विफल हो जाएगा।
दस्तावेज़ों को सहेजते समय फ़ील्ड को एक खाली सरणी बनाना सबसे आसान उपाय है ताकि यह डीबी में इस तरह दिखे:
{
"_id": ObjectId("5df9af0e22bb051d0c25c936"),
"Quotes": [ ]
}
जिसे आपकी सी# संपत्ति को डिफ़ॉल्ट मान देकर आसानी से हासिल किया जा सकता है:
public Quote[] Quotes { get; set; } = new Quote[0];
परीक्षण कार्यक्रम:
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();
}
}
}