【问题标题】:How do I update a document in MongoDB & change all properties apart from_id in C#如何在 MongoDB 中更新文档并更改 C# 中除_id 之外的所有属性
【发布时间】:2018-05-10 21:10:52
【问题描述】:
public class UserObject
{
    public ObjectId _id { get; set; }// Self generated
    public ulong UserID { get; set; } // Self generated
    public string Username { get; set; }
    public string CharClass{ get; set; }
    public int CharLevel { get; set; }
    public int CharColour { get; set; }
}

我只想更新用户名、CharClass、CharLevel 和 CharColour。

我目前有这个:

var client = new MongoClient(DBString);
var database = client.GetDatabase("UserLists");
var collection = database.GetCollection<UserObject>(Convert.ToString(GuildId));

var filter = Builders<UserObject>.Filter.Eq(s => s.Username, newUserName);

var UpdatedUserObject = new UserObject
{
    UserID = UserId,
    Username = newUserName,
    CharClass = newCharClass,
    CharLevel = newCharLevel,
    CharColour = newCharColour 
};

collection.ReplaceOneAsync(filter, UpdatedUserObject);

如果您有任何建议将不胜感激,我已经完成了添加工作,但我似乎无法获得更新,谢谢!

【问题讨论】:

  • 使用collection.UpdateOne()
  • 我收到错误:参数 2:无法从 'TrustMeBot.UserObject' 转换为 'MongoDB.Driver.UpdateDefinition' TrustMeBot 当我将其更改为 UpdateOne()

标签: c# mongodb bson


【解决方案1】:

我最终做了:

var client = new MongoClient(DBString);
var database = client.GetDatabase("UserLists");
var collection = database.GetCollection<UserObject>(Convert.ToString(GuildId));

var filter = Builders<UserObject>.Filter.Eq(s => s.Username, newUserName);

var UpdatedUserObject = new UserObject
{
    UserID = UserId,
    Username = newUserName,
    CharClass = newCharClass,
    CharLevel = newCharLevel,
    CharColour = newCharColour 
};

collection.ReplaceOne(filter, UpdatedUserObject);

这给了我它试图更新 _id 的问题,所以我使用这个堆栈溢出将 [BsonIgnoreIfDefault] 放在它上面,所以它没有尝试更新:

Unable to use BsonIgnoreIfDefault for property of type long

public class UserObject
{
    [BsonIgnoreIfDefault]
    public ObjectId _id { get; set; }// Self generated
    public ulong UserID { get; set; } // Self generated
    public string Username { get; set; }
    public string CharClass{ get; set; }
    public int CharLevel { get; set; }
    public int CharColour { get; set; }
}

在解决这个问题后,我发现问题是我传递了错误的用户名,所以它永远不会匹配,因此没有找到任何要更新的东西,只是我真的很愚蠢,谢谢你的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 2014-06-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多