>백엔드 개발 >Golang >MongoDB에 게시할 때 생성되는 추가 'id' 필드

MongoDB에 게시할 때 생성되는 추가 'id' 필드

王林
王林앞으로
2024-02-05 23:21:07762검색

发布到 MongoDB 时生成的附加“id”字段

질문 내용

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제