此刻我正在更新整个文档,但是如果ID更改,我会收到错误消息:
MongoDB.Driver.MongoWriteException:'写操作导致错误。 应用更新后,发现(不可变)字段“ _id”已更改为_id:BinData(3,B3FD0EE0FF161845BE96BE40A7DDE84B)'
所以我希望它在更新文档时忽略ID字段。
这就是我现在正在做的事情:
public async Task<bool> UpdateMatch(Guid id, Match match)
{
ReplaceOneResult actionResult
= await _context.Match.ReplaceOneAsync(m => m.Id.Equals(id),
match,
new UpdateOptions { IsUpsert = true });
return actionResult.IsAcknowledged && actionResult.ModifiedCount > 0;
}
在此先感谢您的帮助!
答案 0 :(得分:2)
将'BsonIgnoreIfDefault'属性添加到InternalId属性。
public class Document
{
[BsonId]
[BsonIgnoreIfDefault]
public ObjectId InternalId { get; set; }
// rest of document
}
答案 1 :(得分:1)
发生的问题是,如果使用ReplaceOneAsync,则在过滤器或替换文档中未指定的话,MongoDB会将_id字段添加到替换文档中。如果两者都存在_id,则值必须相等。但是,如果我能正确理解您的代码,则尝试通过ID查找文档并将其替换。如果您是我会使用的一个称为FindOneAndReplace()或FindOneAndReplaceAsync()的收集方法。您可能想查看一下MongoDB文档:
https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/
https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndReplace/
希望这对您有帮助!