Ответ 1
Я думаю, что вы ищете ReplaceOneAsync()
:
MyType myObject; // passed in
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)
В настоящее время я обновляю свой код до MongoDB С# 2.0, и у меня возникают проблемы с обновлением кода для обновления документов.
используя старую версию, я смог сделать что-то вроде этого:
MyType myObject; // passed in
var collection = _database.GetCollection<MyType>("myTypes");
var result = collection.Save(myObject);
Я изо всех сил пытаюсь найти способ сделать это в новой версии. Я нашел несколько примеров обновления отдельных полей, таких как
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);
Я хочу обновить все поля, как я делал в старой версии, с помощью метода Save.
Любые идеи?
Спасибо большое
Я думаю, что вы ищете ReplaceOneAsync()
:
MyType myObject; // passed in
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)
Чтобы добавить к ответу mnemosyn, в то время как простой ReplaceOneAsync
действительно обновляет документ, он не эквивалентен " Save
как Save
, а также вставляет документ, если не ReplaceOneAsync
для обновления.
Чтобы добиться того же поведения с ReplaceOneAsync
вам нужно использовать параметр options:
MyType myObject;
var result = await collection.ReplaceOneAsync(
item => item.Id == id,
myObject,
new UpdateOptions {IsUpsert = true});
вы можете использовать LINQ следующим образом: await context.collection.ReplaceOneAsync(b = > b.Id == item.Id, item);