Tôi đang cố chèn một số dữ liệu vào MongoDB bằng Go.Chèn dữ liệu vào MongoDB bằng mgo
Dưới đây là các cấu trúc dữ liệu:
type Entry struct {
Id string `json:"id",bson:"_id,omitempty"`
ResourceId int `json:"resource_id,bson:"resource_id"`
Word string `json:"word",bson:"word"`
Meaning string `json:"meaning",bson:"meaning"`
Example string `json:"example",bson:"example"`
}
Đây là chức năng chèn của tôi:
func insertEntry(db *mgo.Session, entry *Entry) error {
c := db.DB(*mongoDB).C("entries")
count, err := c.Find(bson.M{"resourceid": entry.ResourceId}).Limit(1).Count()
if err != nil {
return err
}
if count > 0 {
return fmt.Errorf("resource %s already exists", entry.ResourceId)
}
return c.Insert(entry)
}
Và cuối cùng, đây là cách tôi gọi nó là:
entry := &Entry{
ResourceId: resourceId,
Word: word,
Meaning: meaning,
Example: example,
}
err = insertEntry(db, entry)
if err != nil {
log.Println("Could not save the entry to MongoDB:", err)
}
Vấn đề là , Tôi đã mong đợi các thẻ bson
của mình hoạt động một cách kỳ diệu, nhưng chúng không hoạt động. Thay vì dữ liệu được lưu lại dưới dạng:
{ "_id": ObjectId ("53700d9cd83e146623e6bfb4"), "RESOURCE_ID": 7.660.708, "chữ": "Foo" ...}
nó được lưu lại dưới dạng:
{ "_id": ObjectId ("53700d9cd83e146623e6bfb4"), "id": "", "RESOURCEID": 7.660.708, "chữ": "Foo" ...}
Làm cách nào để khắc phục sự cố này?
điều này là sai. Id không chỉ cần phải thuộc loại bson.ObjectId mà các thẻ bson không cần thiết ngoại trừ ResourceId không nhận được tự động chuyển thành "resource_id". Các trường cấu trúc chữ hoa bị hạ thấp bởi mgo. Chỉ cần tên trường chữ thường json. –
@dalu _id thực sự có thể thuộc bất kỳ loại nào. Chỉnh sửa: Vâng, trừ khi OP đã mong đợi một ObjectId, mà không phải là hoàn toàn rõ ràng từ câu hỏi. –
@dalu như Gustavo đã nói, _id không cần phải là một ObjectId, Đó là mặc định, nhưng không phải lúc nào cũng là sự lựa chọn cần thiết. Ngoài ra, không có gì là sai. Cá nhân tôi nghĩ rằng bao gồm các thẻ cấu trúc bson là thực hành tốt hơn trong thời gian dài ngay cả khi nó là như nhau. Hãy tưởng tượng nếu một dev tương lai xuất hiện và quyết định thay đổi biến "Word" thành "Title". Không định nghĩa thẻ bson, chúng sẽ thay đổi kho dữ liệu mà không nhận ra nó. Giữ một thẻ bson giúp duy trì IMO dòng và tồi tệ hơn, làm cho bạn gõ một vài ký tự cho rõ ràng. – TrevorSStone