2016-09-12 3 views
0

큰 목표는 업데이트 쿼리를 이동하여 요청에서 전송 된 필드 만 설정하는 것입니다.미리 만들어진 문자열을 bson.M과 같이 mgo 쿼리에 사용하십시오.

는 예를 들어, 나는 사용자가 간단히과 같이 요청에 그들을 지정하여 필드의 변수 번호를 업데이트 할 수 있도록하고 위치를 업데이트 할 문서가 -

{ 
"field1": valueOfField1, 
"field2": valueOfField2, 
"field3": valueOfField3, 
... 
} 

여기서 문제는 때 I 이 입력을 json.Decode을 사용하여 대부분의 필드가 선택적 인 사용자 정의 struct 유형으로 디코딩하면 입력에 존재하지 않는 값은 nil입니다.

내 구조체는 다음과 같습니다 -

bson.M{"$set": bson.M{"field1": body.Field1, "field2": body.Field2, "field3": body.Field3, "field4": body.Field4, ...}} 

문제는,

type Fields struct { 
    Field1  string  `bson:"field1" json:"field1,omitempty"` 
    Field2  string  `bson:"field2" json:"field2"` 
    Field3  time.Time `bson:"field3,omitempty" json:"field3,omitempty"` 
    Field4  bool  `bson:"field4,omitempty" json:"field4,omitempty"` 
... 
} 

지금 내 업데이트 쿼리에, 내가 말할 이러한 필드 중 하나가 입력에 존재하지 않는 경우에 그, 그것은 여전히 데이터베이스의 기존 값을 덮어 쓰고 null로 만듭니다.

이를 방지하기 위해, 내가 이상적으로이 {"field1": body.Field1, "field2": body.Field2, "field3": body.Field3, "field4": body.Field4, ...} 부분은 동적으로 오는 분야에 따라 구성되는 것을 원하는 것이

지금처럼, 내가 입력의 json.Marshal을했던 것을 위해 -.

finalbody, err := json.Marshal(body) 
물론

bson.M{"$set": string(finalbody)} 

이 나에게 말을 오류 제공 - - "변형 된을

그리고 나는대로 $ 세트 필드 내에서 이것을 사용하는 것을 시도하고있다 rs는 필드에서 작동하지만 대신 문자열을 발견했습니다. " 문자열은 bson.M과 완전히 같습니다 .M은 bson이 아니라는 점을 제외하고는 M입니다. 예 : {"field1": valueOfField1, "field2": valueOfField2, "field3": valueOfField1, ...}

어디서 잘못 되었나요?

답변

0

finalbody를 맵 해제하여지도 [string] 인터페이스 {}에 넣은 다음이를 업데이트 맵으로 사용했습니다.

finalbody, err := json.Marshal(body) 
    if err != nil { 
     log.Println(err) 
     return 
    } 
var finalbodymap map[string]interface{} 
    if err = json.Unmarshal(finalbody, &finalbodymap); err != nil{ 
     log.Println(err) 
    } 

그리고 업데이트 쿼리에서, 단순히 쓸 수 -

그래서,

finalbody, err := json.Marshal(body) 
var finalbodymap map[string]interface{} 
json.Unmarshal(finalbody, &finalbodymap) 

은 물론, 그렇게 마지막 코드는 다음과 같습니다 처리 일부 오류를 추가 할 필요가 -

bson.M{"$set": finalbodymap} 

여기서 한 가지 문제는 마샬링하는 동안 언제든지 설정한다는 것입니다. 시간 형식 값을 ni l 즉 "0001-01-01T00 : 00 : 00Z". 나는 그러한 행동이 특정 다른 유형에서도 관찰 될 수 있다고 생각한다.

관련 문제