큰 목표는 업데이트 쿼리를 이동하여 요청에서 전송 된 필드 만 설정하는 것입니다.미리 만들어진 문자열을 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, ...}
어디서 잘못 되었나요?