[英]How to upsert a document in MongoDB .Net?
我正在添加一個UpdateCustomer
方法,該方法傳入要保存到數據庫的修改后的客戶。 但是我在更新的文檔上調用ReplaceOneAsync
時遇到錯誤。
我查閱了以下示例和api 參考,它們都聲明要傳遞ReplaceOneAsync
filter
和document
參數。
但是具體的錯誤是因為參數不正確而拋出的,如下:
Error 1 The best overloaded method match for 'MongoDB.Driver.IMongoCollection<MongoDBApp.Models.CustomerModel>.ReplaceOneAsync(MongoDB.Driver.FilterDefinition<MongoDBApp.Models.CustomerModel>, MongoDBApp.Models.CustomerModel, MongoDB.Driver.UpdateOptions, System.Threading.CancellationToken)' has some invalid arguments
Error 2 Argument 2: cannot convert from 'MongoDB.Bson.BsonDocument' to 'MongoDBApp.Models.CustomerModel'
任何人都對理解錯誤有任何提示嗎?
UpdateCustomer
方法:
public async Task UpdateCustomer(CustomerModel customer)
{
var collection = StartConnection();
var filter = Builders<CustomerModel>.Filter.Where(x => x.Id == customer.Id);
BsonDocument doc = new BsonDocument();
doc["_id"] = customer.Id;
doc["firstName"] = customer.FirstName;
doc["lastName"] = customer.LastName;
doc["email"] = customer.Email;
//error thrown here on the ReplaceOneAsync params..
await collection.ReplaceOneAsync(filter, doc);
}
以及相關的 StartConnection 方法:
private static IMongoCollection<CustomerModel> StartConnection()
{
var client = new MongoClient(connectionString);
var database = client.GetDatabase("orders");
//Get a handle on the customers collection:
var collection = database.GetCollection<CustomerModel>("customers");
return collection;
}
您需要一直使用類型化集合,這意味着插入CustomerModel
的實例,而不是BsonDocument
:
await collection.ReplaceOneAsync(filter, customer);
或者在BsonDocument
使用無類型的,但從一開始就這樣做:
var collection = database.GetCollection<BsonDocument>("customers");
您收到這些編譯錯誤是因為您混合了這兩個選項。
這對我有用
var filter = Builders.Filter.Where(x => x.Id == customer.Id); await Collection.ReplaceOneAsync(filter, item, new ReplaceOptions { IsUpsert = true });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.