2012-05-12 1 views
4

Думали, что это будет довольно прямолинейно, но мое значение остается таким же (0).Как вы увеличиваете поле в mongodb с помощью C#

Что я хотел бы сделать, это увеличить мое поле Непрочитанные сообщения, когда пользователь получает сообщение, которое они не прочитали, а затем уменьшает его, когда оно есть. Так я думал, что такой код будет работать:

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)); 

После выполнения этих не без ошибок выбрасываются, но значение не изменяется. И нет, я не буду не работает один за другим, как приведенный выше код может быть истолковано :)

Update

Вот мой вспомогательный класс:

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()); 
    } 
} 

и благодаря I ответ Трэвиса был способен снять это:

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

Любые причины для downvotes? Что я сделал неправильно? – rball

+0

@SergioTulentsev Я постараюсь, но я боюсь, что я действительно новичок в монго, поэтому я учусь, когда я собираюсь. – 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'? –