php小編蘋果將為你介紹如何正確建立mongo模型和客戶端。在使用MongoDB進行開發時,建立模型和客戶端是非常重要的一步,它們決定了你在後續操作中的靈活性和效率。首先,你需要透過安裝MongoDB擴充功能來啟用MongoDB支援。然後,你可以使用MongoDB提供的API來建立模型和客戶端。建立模型時,你需要定義集合名稱、欄位和索引等相關資訊。建立客戶端時,你需要指定MongoDB的連線訊息,如主機名稱、連接埠號碼和認證資訊等。透過正確建立模型和客戶端,你將能夠更好地操作MongoDB資料庫,提高開發效率和程式碼品質。
我有一個模型想要插入並從 mongodb 讀取:
type TripFeedback struct { ID primitive.ObjectID `json:"_id" bson:"_id"` UserID string `json:"user_id" bson:"user_id"` WaybillID uint64 `json:"waybill_id" bson:"waybill_id"` Rating Rating `json:"rating" bson:"rating"` Comment string `json:"comment" bson:"comment"` CreatedAt time.Time `json:"created_at" bson:"created_at"` }
我希望 ID 欄位在 mongo 內部自動遞增,所以我將 ID 欄位保留為空:
feedback := model.NewTripFeedback( createRequest.UserID, createRequest.WaybillID, rating, createRequest.Comment, createRequest.ReceivedAt, ) _, err = r.collection.Create(ctx, feedback)
此外,在建立儲存庫時,我這樣做:
// NewFeedbackRepository connects to mongo db and feedback collection. func NewFeedbackRepository(ctx context.Context, client *mongo.Client) (*FeedbacksRepository, error) { r := FeedbacksRepository{ c: client.Database(dbName).Collection(feedbackCollectionName), metrics: NewMetrics(), } if err := r.migrate(ctx); err != nil { return nil, err } return &r, nil } // migrate ensures presence of dossier collection in database. func (r *FeedbacksRepository) migrate(ctx context.Context) error { mdb := r.c.Database() cs, lcErr := mdb.ListCollectionNames(ctx, bson.M{"name": feedbackCollectionName}) if lcErr != nil { return fmt.Errorf("migrate: list collections error: %w", lcErr) } if len(cs) == 0 { if err := mdb.CreateCollection(ctx, feedbackCollectionName); err != nil { return fmt.Errorf("migrate: create collection error: %w", err) } } return nil }
你能告訴我我做錯了什麼嗎?我還沒有真正理解如何正確使用 mongo db 中的 _id 欄位。我希望它在 mongo 內部創建和處理
write errors : [E11000 duplicate key error collection: drive.feedback index: _id_ dup key: { _id: ObjectId('000000000000000000000000') }]"
如果未傳入,MongoDB 將產生 ID。在您的結構中,您傳入的 ID 全部為零。
您可以做兩件事:
您可以自己產生它:
feedback := model.NewTripFeedback( ID: primitive.NewObjectID(), createRequest.UserID,
或者,您沒有將其傳入:
type TripFeedback struct { ID *primitive.ObjectID `json:"_id" bson:"_id,omitempty"` UserID string `json:"user_id" bson:"user_id"` ...
然後,如果不初始化ID,則會產生ID。
以上是如何正確建立mongo模型和客戶端?的詳細內容。更多資訊請關注PHP中文網其他相關文章!