Próbuję wstawić niektóre dane w MongoDB za pomocą Go.Wstawianie danych do MongoDB z mgo
Oto struktura danych:
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"`
}
To jest moja funkcja insert:
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)
}
I wreszcie, to jak ja to nazywam:
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)
}
Kłopot , Spodziewałem się, że moje znaczniki bson
magicznie działają, ale nie działają. zamiast danych są zapisywane jako:
{ "_id": ObjectId ("53700d9cd83e146623e6bfb4"), "RESOURCE_ID": 7660708, "słowo": "foo" ...}
to zostaje zapisany jako:
{ "_id": ObjectId ("53700d9cd83e146623e6bfb4"), "id": "", "RESOURCEID": 7.660.708, "słowo": "Foo" ...}
Jak mogę to naprawić?
to jest złe. nie tylko musi być Id typu bson.ObjectId, ale tagi bson nie są konieczne, z wyjątkiem ResourceId, który nie jest automatycznie przekierowywany do "resource_id". Wielkie pola struct są małe przez mgo. Wymagana jest tylko nazwa pola małej litery json. –
@dalu _id może być dowolnego typu. Edycja: No cóż, chyba że PO spodziewał się ObjectId, co nie jest całkowicie jasne z pytania. –
@dalu jak powiedział Gustavo, _id nie musi być ObjectId, to jest domyślny, ale nie zawsze wymagany wybór. Ponadto nic nie jest nie tak. Osobiście uważam, że dołączenie tagu struct bson jest lepszą praktyką na dłuższą metę, nawet jeśli jest taka sama. Wyobraź sobie, że pojawi się przyszły program i zdecydujesz się zmienić zmienną "Słowo" na "Tytuł". Bez zdefiniowania tagu bson zmieniłoby to magazyn danych, nie zdając sobie z tego sprawy. Zachowanie tagu bson pomaga w utrzymaniu IMO linii, a co gorsza, sprawia, że wpisujesz kilka znaków dla jasności. – TrevorSStone