공식 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
'programing' 카테고리의 다른 글
| 여기서 ${EXECUTABLE_NAME} 및 ${PRODUCT_NAME}은(는) 정의됩니다. (0) | 2023.04.29 |
|---|---|
| UIScrollView 내부의 UIWebView를 확대하려면 어떻게 해야 합니까? (0) | 2023.04.29 |
| 아이폰 앱 베타 테스트는 어떻게 하나요? (0) | 2023.04.29 |
| 끌어 당겨서 UITableView 컨트롤러 없이 UITableView 새로 고침 (0) | 2023.04.29 |
| 오류: 참조 테이블 "bar"에 대해 지정된 키와 일치하는 고유 제약 조건이 없습니다. (0) | 2023.04.29 |