programing

MongoDBC# 드라이버 2.0 - 문서 업데이트

showcode 2023. 5. 25. 22:15
반응형

MongoDBC# 드라이버 2.0 - 문서 업데이트

현재 MongoDBC# 드라이버 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);

이전 버전에서 했던 것처럼 모든 필드를 저장 방법으로 업데이트하려고 합니다.

무슨 생각 있어요?

정말 감사해요.

당신이 찾고 있는 것 같습니다.ReplaceOneAsync():

MyType myObject; // passed in 
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)

니모신의 대답에 덧붙이자면, 간단한 것은.ReplaceOneAsync해당되지 않는 문서를 업데이트합니까?Save~하듯이Save또한 업데이트할 문서를 찾지 못한 경우 문서를 삽입합니다.

에서 동일한 동작을 수행하는 경우ReplaceOneAsync옵션 매개 변수를 사용해야 합니다.

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);

사용하다ObjectId.Parse(id)

var filter = Builders<MyType>.Filter.Eq(s => s.Id, ObjectId.Parse(id));
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);

언급URL : https://stackoverflow.com/questions/30257013/mongodb-c-sharp-driver-2-0-update-document

반응형