如何使用c#增加mongodb中的字段

时间:2012-05-12 19:08:42

标签: mongodb mongodb-.net-driver 10gen-csharp-driver

认为这很简单,但我的价值保持不变(0)。

我想要做的是当用户收到他们未读取的消息时递增我的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>();

1 个答案:

答案 0 :(得分: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);

因此,“query”查找文档,update更新增量,FindAndModify将它们放在一起并实际点击数据库。