go 및 gin 프레임워크를 배우고 있습니다. mongodb 컬렉션에 연결하는 간단한 마이크로서비스를 구축했는데 모든 것이 잘 작동하지만 post를 사용하여 문서를 추가하면 키 "_id" 필드를 생성하는 대신 "id" 필드가 추가됩니다. 이를 방지할 수 있는 방법이 있습니까?
내 기능은 다음과 같습니다.
으아아아이것은 내 모델입니다:
func (r *rest) createpost(c *gin.context) { var postcollection = database.getcollection(r.db, "godb") ctx, cancel := context.withtimeout(context.background(), 10*time.second) post := new(model.post) defer cancel() if err := c.shouldbindjson(&post); err != nil { c.json(http.statusbadrequest, gin.h{"message": err}) log.fatal(err) return } // validation if err := post.validate(); err == nil { c.json(http.statusok, gin.h{"input": "valid"}) } else { c.json(http.statusbadrequest, gin.h{"input validation": err.error()}) return } postpayload := model.post{ id: primitive.newobjectid(), title: post.title, article: post.article, } result, err := postcollection.insertone(ctx, postpayload) if err != nil { c.json(http.statusinternalservererror, gin.h{"message": err}) return } c.json(http.statusok, gin.h{"message": "posted succesfully", "data": map[string]interface{}{"data": result}}) }
기본적으로 id
的密钥是 id
。您应该使用 bson
标签来生成密钥 _id
입니다.
이것은 문서입니다:
구조를 마샬링할 때 각 필드는 해당 bson 요소에 대한 키를 생성하기 위해 소문자입니다. 예를 들어 "foo"라는 구조 필드는 "foo" 키를 생성합니다. 이는 구조 태그를 통해 재정의될 수 있습니다(예: "foofield" 키를 생성하기 위해 bson:"foofield"
).
문서에 _id
라는 요소가 없으면 드라이버가 자동으로 요소를 추가합니다(소스 코드 참조).
데모는 다음과 같습니다.
으아아아그리고 데이터베이스에 생성된 문서:
으아아아위 내용은 MongoDB에 게시할 때 생성되는 추가 'id' 필드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!