ホームページ >バックエンド開発 >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」を生成します。これは構造体タグを介してオーバーライドできます (例:

bson:"foofield" キー「foofield」を生成する)。

ドキュメントに

_id という名前の要素が含まれていない場合、ドライバーは自動的に要素を追加します (ソース コード を参照): リーリー

これはデモです:

リーリー

そしてデータベースに作成されたドキュメント:

リーリー

以上がMongoDB への公開時に追加の「id」フィールドが生成されるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。