2014-07-09 80 views
0

我試圖設置一堆字段到當前值和新值之間的最大值。

,我覺得這樣做

UpdateBuilder<ADocument> update = Update<ADocument> 

.SetMax (d => d.HighScore, highScore) 
.SetMax (d => d.MaxGameTime, gameTime) 
.SetMax (d => d.MaxLevels, levels); 

等。但沒有.SetMax,或根本沒有。最大 - 這將使用$最大的關鍵字來進行設置。

那麼,你如何做到這一點?我不想創建3個查詢(在我的實例中是6個)來查詢Max highScore,並將其設置爲.GE,並對每個其他字段進行重複。

感謝

+0

你需要https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB。驅動程序/ MongoCursor.cs#L461-L466 –

+0

2.6中有一個$ max操作符用於更新。由於它是一個新的操作符,因此您必須使用最新版本的C#驅動程序才能使用@MatijaGrcic正確指出的SetMax。 –

+0

看起來像數據庫是2.4.9 - 所以我認爲這意味着它不被支持?我們正在運行C#驅動程序的1.8.3.9。所以我們需要更新才能完成這項工作? –

回答

0

支持爲$ max和$最小運營商加入到C#驅動程序在C#驅動程序的版本1.9.0。您必須至少使用該版本的C#驅動程序才能使用UpdateBuilder創建包含Max或Min的更新規範。

新的更新方法,建設者在這裏:

https://github.com/mongodb/mongo-csharp-driver/blob/v1.x/MongoDB.Driver/Builders/UpdateBuilder.cs#L269

這些都不是一樣的SETMAX和SetMin上的遊標,這是一種不同的最大和最小的。

訪問這些更新操作符的最簡單方法是更新到最新版本的C#驅動程序。作爲一種變通方法,您可以用較低水平的技術如下構建更新說明:

var update = new UpdateDocument 
{ 
    { "$max", new BsonDocument 
     { 
      { "HighScore", highScore }, 
      { "MaxGameTime", gameTime }, 
      { "MaxLevels", levels } 
     } 
    } 
}; 
+0

所以這隻會在他們比以前更高時更新它們? –