programing

공식 C# 드라이버를 사용하여 Mongo DB에서 시작

easyjava 2023. 4. 29. 10:00
반응형

공식 C# 드라이버를 사용하여 Mongo DB에서 시작

mongodb의 공식 문서에서 upsert를 언급하고 있으므로 다음 대신 upsert 명령을 작성하면 정말 좋을 것입니다.

if (_campaignRepo.Exists(camp))
{
    _campaignRepo.DeleteByIdAndSystemId(camp);
}

_campaignRepo.Save(camp);

가능하다면 DB 수준에서 그 논리를 구현할 수 있는 것.그렇다면 업서트가 있다면 어떤 방법이 있을까요?

MongoDBC# 드라이버 버전 2를 사용하려면IsUpsert쓰기 명령에 플래그가 있습니다.이 예제는 전체 문서를 뒤집습니다.

var newDoc = new BsonDocument { { "_id", 123 }, { "someKey", "someValue" } };
var result = await collection.ReplaceOneAsync(
                filter: new BsonDocument("_id", 123),
                options: new ReplaceOptions { IsUpsert = true },
                replacement: newDoc);

MongoDBC# 드라이버 버전 1은 다음과 같은 논리를 구현합니다.Save지휘권

var newDoc = new BsonDocument { { "_id", 123 }, { "someKey", "someValue" } };
collection.Save(newDoc);

저장 방법은 삽입과 업데이트의 조합입니다.문서의 ID 구성원이 값을 가지고 있는 경우, 문서는 기존 문서로 간주되고 저장은 문서에 업데이트를 호출합니다(실제 새 문서인 경우를 대비하여 Upsert 플래그 설정).그렇지 않으면 새 문서로 간주되고 새로 생성된 고유 값을 ID 구성원에게 할당한 후 Save calls Insert를 호출합니다.

참조: http://mongodb.github.io/mongo-csharp-driver/1.11/driver/ #save-tdocument-messages

참고: 그러나 ID 필드의 적절한 매핑이 필요합니다.자세한 내용은 여기에서 확인하십시오. http://mongodb.github.io/mongo-csharp-driver/1.11/serialization/ #ID 필드 또는 인스턴스 식별

드라이버의 v2.0부터 새로운 비동기 전용 API가 있습니다.이전 API는 새로운 API에 대한 차단 기능이므로 더 이상 사용해서는 안 됩니다.

현재 권장되는 문서를 뒤집는 방법은 전화를 걸어 대기하는 것입니다.ReplaceOneAsync와 함께IsUpsert설정된 플래그와 관련 문서와 일치하는 필터:

Hamster hamster = ...
var replaceOneResult = await collection.ReplaceOneAsync(
    doc => doc.Id == hamster.Id, 
    hamster, 
    new UpdateOptions {IsUpsert = true});

작업이 삽입인지 업데이트인지 확인하려면 다음을 참조하십시오.ReplaceOneResult.MatchedCount:

작동 중인 앱의 코드는 다음과 같습니다.

weekplanStore.Update(
    Query.EQ("weekNumber", week),
    Update.Replace(rawWeekPlan),
    UpdateFlags.Upsert);

weekplanStore는 나의 MongoDB 컬렉션이며, 코드는 첫 번째 인수에 있는 쿼리와 함께 발견된 문서를 업데이트하거나 찾을 수 없는 경우 새 문서를 삽입합니다."꼼수"는 업데이트 플래그를 사용하는 것입니다.수정자를 위로 올립니다.

rawWeekPlan은 삽입되거나 업데이트된 개체이며 다음 유형이 있습니다.

private class RawWeekPlan
{
    public ObjectId id;
    public int weekNumber;
    public WeekPlanEntry[] entries;
}

그리고 운전자에 의해 자동으로 bson으로 변했습니다.

일반 update 명령을 사용할 수 있지만 Upsert update 플래그를 전달하기만 하면 됩니다.

MongoCollection collection = db.GetCollection("matches");
var query = new QueryDocument("recordId", recordId);

var update = Update.Set("FirstName", "John").Set("LastName","Doe");
matchCollection.Update(query, update, UpdateFlags.Upsert, SafeMode.False);

해당 코드는 작동 중인 응용 프로그램에서 수정되었습니다(명확성을 위해 단축됨).

언급URL : https://stackoverflow.com/questions/7240028/upserting-in-mongo-db-using-official-c-sharp-driver

반응형