2012-01-22 2 views
1

다음 문서가 있습니다.C# mongodb 필드 이름 중복 해결 방법

{ 
    name: 'XYZ', 
    SubscriptionPeriods" : [{ 
     "_id" : null, 
     "PeriodCode" : "1M", 
     "Fee" : "100" 
    }, { 
     "_id" : null, 
     "PeriodCode" : "3M", 
     "Fee" : "300" 
    }] 
} 

관리자는 가입 기간을 업데이트 할 수 있습니다. 그는 동일한 기간에 기존 기간을 삭제하거나 새로운 기간을 추가 할 수 있습니다. 처음에는 하나의 업데이트 (...)에서 SubscriptionPeriods 요소에 대해 PullAll (...) 및 PushAll (...)을 수행하여이 작업을 수행 할 수 있다고 생각했습니다. 하지만 mongodb는 업데이트 (...)에서 필드를 두 번 허용하지 않습니다. 나는 2 개의 다른 Update (...)에서 PullAll (...)과 PushAll (...)을 할 수있었습니다. 하지만 누군가가 PullAll()과 PushAll() 사이에서 SubscriptionPeriods를 읽으려고하면 빈 SubscriptionPeriods를 얻고 받아 들일 수 없기 때문에 접근하지 않았습니다. 그래서 나는 이것을 생각해 냈습니다. 하나의 업데이트에 SubscriptionPeriods1이라는 또 다른 요소를 만들고 다른 업데이트의 SubscriptionPeriod로 이름을 변경했습니다. 이것은 실망스럽게 보입니다. 그러나 나는 무엇이라도 여기에서 멀리 바라보고 있는지 궁금하게 생각하고있다! MongoDB 전문가가 저에게 줄 수있는 의견을 보내 주시면 감사하겠습니다!

답변

0

네, 맞습니다. 운전자는 같은 분야에서 두 가지 작업을 허용하지 않습니다. 하지만, 귀하의 경우에 훨씬 간단한 솔루션이 있습니다.

Update.PullAll("name", ..).PushAll("name", ..)Set("name", bsonArray)

대신 이전의 그래서 당신은 간단하게 설정할 필요가 새로운 배열 같습니다.

+0

감사합니다. 그것은 효과가 있었다. 사실 Set (...)를 시도했지만 'bson document의 루트에 배열을 놓을 수 없습니다'라는 오류가 나타나서 실패했습니다. 나는 Set ("ArrayElementName", List .ToBsonDocument())와 같은 것을 사용했다. 나는 ToBsonDocument()가 '배열은 루트에있을 수 없다'고 불평한다고 생각합니다. 나는 그때를 깨닫지 못했고 Rename (...)으로 정착하기 전에 다양한 다른 옵션을 시도해 보았습니다. 그럼에도 BsonArray가 Set의 두 번째 인수로 작동합니다! – user1163459

+0

@ user1163459 : 환영합니다. –