2012-05-12 51 views
4

認爲這將是非常簡單的增加一個字段在MongoDB中,但我的價值保持不變(0)。你如何使用C#

我想要做的是,當用戶收到他們沒有閱讀,然後再遞減,當他們有一個消息遞增我UnreadMessages場。所以我認爲這樣的代碼會工作:

var userHelper = new MongoHelper<User>(); 
//increment 
userHelper.Collection.Update(Query.EQ("Id", userId.ToId()), Update.Inc("UnreadMessages", 1)); 
//decrement 
userHelper.Collection.Update(Query.EQ("Id", userId.ToId()), Update.Inc("UnreadMessages", -1)); 

運行這些後沒有錯誤引發,但值也不會改變。而且沒有我沒有運行一前一後爲上面的代碼可以被解釋:)

更新

這裏是我的助手類:

public class MongoHelper<T> : Sandbox.Services.IMongoHelper<T> where T : class 
{ 
    public MongoCollection<T> Collection { get; private set; } 

    public MongoHelper() 
    { 
     var con = new MongoConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MongoDB"].ConnectionString); 
     var server = MongoServer.Create(con); 
     var db = server.GetDatabase(con.DatabaseName); 
     Collection = db.GetCollection<T>(typeof(T).Name.ToLower()); 
    } 
} 

,並感謝Travis的答案,我能夠把這個關掉:

MongoHelper<UserDocument> userHelper = new MongoHelper<UserDocument>(); 
      var user = userHelper.Collection.FindAndModify(Query.EQ("Username", "a"), SortBy.Null, Update.Inc("MessageCount", 1), true).GetModifiedDocumentAs<UserDocument>(); 
+0

嘗試在外殼。 –

+0

降價的原因是什麼?我做錯了什麼? – rball

+0

@SergioTulentsev我會嘗試,但我怕我真的很新MONGO所以我學習,我要去。 – rball

回答

12

不知道你的幫手是做什麼的。這是一個工作片斷我用:

 var query = Query.And(Query.EQ("_id", keyName)); 
     var sortBy = SortBy.Null; 
     var update = Update.Inc("KeyValue", adjustmentAmount); 
     var result = collection.FindAndModify(query, sortBy, update, true); 

所以,「查詢」查找文件,更新做增量,並FindAndModify把它們放在一起,實際上是訪問數據庫。

+1

我真的很喜歡FindAndModify,直到你的帖子才知道它,謝謝。 – rball

+0

如何使用FindAndModify通過另一個屬性值增加一個屬性? – jjxtra

+0

這是什麼意思'keyName'? –