[MONGODB] 공식 C #을 드라이버를 사용하여 MongoDB에 삽입
MONGODB공식 C #을 드라이버를 사용하여 MongoDB에 삽입
그들이 upserts을 언급하여 MongoDB의 공식 문서에서, 그래서 대신의 upsert 명령을 작성하는 정말 좋은 것입니다 :
if (_campaignRepo.Exists(camp))
{
_campaignRepo.DeleteByIdAndSystemId(camp);
}
_campaignRepo.Save(camp);
가능한 경우 DB를 수준에 그 로직을 구현하는 것이 무엇인가. 그래서 존재하는 경우 upsert을 할 수있는 방법은 무엇입니까?
해결법
-
==============================
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.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.드라이버의 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.당신은 정기적으로 업데이트 명령을 사용하지만, 단지 그것에게 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);
그 코드는 작동 프로그램에서 구성된다 (명확성을 위해 단축)
from https://stackoverflow.com/questions/7240028/upserting-in-mongo-db-using-official-c-sharp-driver by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽고없이 유성 (0) | 2019.12.22 |
---|---|
[MONGODB] MongoDB의 연결을 처리하는 올바른 방법은 무엇입니까? (0) | 2019.12.22 |
[MONGODB] 여기서 _id의 배열의 선택 MongoDB를? (0) | 2019.12.22 |
[MONGODB] 쿼리는 MongoDB를 가진 마지막으로 X 분의 데이터를 얻을 수 있습니다 (0) | 2019.12.22 |
[MONGODB] 어떻게 몽고에서 포스트 태그를 구현하는 방법? (0) | 2019.12.22 |