복붙노트

[MONGODB] 공식 C #을 드라이버를 사용하여 MongoDB에 삽입

MONGODB

공식 C #을 드라이버를 사용하여 MongoDB에 삽입

그들이 upserts을 언급하여 MongoDB의 공식 문서에서, 그래서 대신의 upsert 명령을 작성하는 정말 좋은 것입니다 :

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

_campaignRepo.Save(camp);

가능한 경우 DB를 수준에 그 로직을 구현하는 것이 무엇인가. 그래서 존재하는 경우 upsert을 할 수있는 방법은 무엇입니까?

해결법

  1. ==============================

    1.다음 코드는 작업 응용 프로그램에서입니다 :

    다음 코드는 작업 응용 프로그램에서입니다 :

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

    weekplanStore 내 MongoDB를 수집하고, 코드는 첫 번째 인수의 쿼리에있는 문서를 업데이트하거나 아무 것도 발견되지 않으면 새를 삽입합니다. 은 "트릭"는 UpdateFlags.Upsert 수정을 사용하는 것입니다.

    rawWeekPlan 삽입 또는 업데이트 된 객체이며, 다음과 같은 유형이 있습니다 :

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

    자동으로 드라이버 bson으로 돌렸다.

  2. ==============================

    2.MongoDB를 C #을 드라이버의 버전 2는 쓰기 명령에 IsUpsert 플래그를 설정해야합니다. 이 예는 전체 문서를 upsert 것입니다.

    MongoDB를 C #을 드라이버의 버전 2는 쓰기 명령에 IsUpsert 플래그를 설정해야합니다. 이 예는 전체 문서를 upsert 것입니다.

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

    MongoDB를 C # 드라이버 구현 저장 명령에서이 논리의 버전 1.

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

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

    참고 :이 그러나 ID 필드의 적절한지도를 필요로한다. 그 여기에 대한 자세한 정보 : http://mongodb.github.io/mongo-csharp-driver/1.11/serialization/#identifying-the-id-field-or-property

  3. ==============================

    3.드라이버의 2.0에서 시작하는 것은 새로운 비동기 전용 API가 있습니다. 이 새로운 API를 통해 차단 외관 그리고 사용되지 않습니다으로 이전 API는 더 이상 사용해서는 안된다.

    드라이버의 2.0에서 시작하는 것은 새로운 비동기 전용 API가 있습니다. 이 새로운 API를 통해 차단 외관 그리고 사용되지 않습니다으로 이전 API는 더 이상 사용해서는 안된다.

    문서를 upsert하는 현재 권장되는 방법은 전화 및 켜야 IsUpsert 플래그 및 관련 문서와 일치하는 필터 ReplaceOneAsync을 기다리는 것입니다 :

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

    작업이 삽입 또는 ReplaceOneResult.MatchedCount보고하여 업데이트 여부를 확인할 수 있습니다 :

  4. ==============================

    4.당신은 정기적으로 업데이트 명령을 사용하지만, 단지 그것에게 Upsert 업데이트 플래그를 전달할 수 있습니다

    당신은 정기적으로 업데이트 명령을 사용하지만, 단지 그것에게 Upsert 업데이트 플래그를 전달할 수 있습니다

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

    그 코드는 작동 프로그램에서 구성된다 (명확성을 위해 단축)

  5. from https://stackoverflow.com/questions/7240028/upserting-in-mongo-db-using-official-c-sharp-driver by cc-by-sa and MIT license