使用 Mongo DB C# 驱动程序按 ID 字段更新文档

Lia*_*ill 6 c# asp.net mongodb

我正在使用最新的 MongoDB C# 驱动程序,但我的一个查询出现问题。我正在尝试更新 Mongo 中文档中的字段并通过其 id 字段识别该文档。我已经编写了类似的查询,可以根据其他字段过滤文档,但由于某些原因,它不适用于 id 字段。

我的查询:

public static async Task<bool> Delete(string Guid)
{
var database = new MongoDB();
var thingsCollection = database.Things;
var builder = Builders<ThingsModel>.Filter;
var filter = builder.Eq("_id", Guid);
var update = Builders<ThingsModel>.Update
    .Set("IsActive", false);
var updateResult = await thingsCollection.UpdateOneAsync(filter, update);
return true;         
}
Run Code Online (Sandbox Code Playgroud)

我意识到我每次都会返回 true,但这只是为了测试。从 Mongo 返回的 updateResult 对象表示,尽管它是 thingsCollection 中的一个事物,并且 Guid 作为参数传入,但它没有找到任何匹配项。我还将 Guid 属性标记为集合中的 ID 字段,如下所示:

[BsonId]
public Guid Guid { get; set; }
Run Code Online (Sandbox Code Playgroud)

我也知道我需要将名称从 Guid 更改为其他名称,因为这是不好的做法,但一次只做一件事:) 我感谢任何帮助!

pro*_*r79 5

您的命名可能有问题。

使用 linqu 语法我们可以得到这个(_id 用作 id 字段):

var update = Builders<ThingsModel>.Update.Set(a => a.IsActive, false); 
var result = _collection.UpdateOne(model => model._id == _id, update);
Run Code Online (Sandbox Code Playgroud)

完整代码在这里