1
MongoCollection.Update()使用C#<T>
我使用MongoVue應用程序顯示存儲在 「MongoDB的」 數據預覽更新列表。
在附圖中,數據庫名稱「Energy」具有集合名稱「DataLog」。在「DataLog」中,有幾行。我將這些行從.CSV文件中讀取到集合中。
現在有時列名的Ping具有巨大的數據[說的2000項陣列用於單個行由於其即,如果「MaxDocumentSize超過16MB」
由於的Ping陣列是巨大的,其拋出異常發生一個例外,爲了避免這種情況,我刪除了Pings [即從行中輸入空白收集]並嘗試插入,它成功了。
現在我想更新相同條目的Pings,但是如果數組是2000元素或更高的數組,那麼我希望在循環中以500個項目[500 x 4 = 2000]的組進行更新。
任何人都可以幫助我。
**樣品編號**
private void InsertData(Datalog xiDatalog)
{
List<Ping> tempPings = new List<Ping>();
tempPings.AddRange(xiDatalog.Pings);
xiDatalog.Pings.RemoveAll(x => x.RowId != 0);
WriteConcernResult wc = mongoCollection.Insert(xiDatalog);
counter++;
var query = new QueryDocument("_id", xiDatalog.Id);
MongoCursor<Datalog> cursor = mongoCollection.FindAs<Datalog>(query);
foreach (Datalog data in cursor)
{
AddPings(data, tempPings, mongoCollection);
break;
}
}
private void AddPings(Datalog xiDatalog, List<Ping> xiPings, MongoCollection<Datalog> mongoCollection)
{
int groupCnt = 0;
int insertCnt = 0;
foreach (Ping px in xiPings)
{
xiDatalog.Pings.Add(px);
groupCnt++;
if (((int)(groupCnt/500)) > insertCnt)
{
UpdateDataLog(xiDatalog.Id, xiDatalog.Pings, mongoCollection);
insertCnt++;
}
}
}
private bool UpdateDataLog(BsonValue Id, List<Ping> tempPings, MongoCollection<Datalog> mongoCollection)
{
bool success = false;
try
{
var query = new QueryDocument("_id", Id);
var update = Update<Datalog>.Set(e => e.Pings, tempPings);
mongoCollection.Update(query, update);
success = true;
}
catch (Exception ex)
{
string error = ex.Message;
}
return success;
}
文檔總大小不能超過16mb。你似乎試圖插入相同數量的數據,只是以塊爲單位?如果您添加了您嘗試過的代碼,這將更加清晰。 – WiredPrairie
您是否考慮過將Pings放入不同的系列? –
**添加示例代碼,請參閱** –