Вставка данных в MongoDB с помощью mgo
Я пытаюсь вставить некоторые данные в MongoDB с помощью Go.
Вот структура данных:
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"`
}
Это моя функция вставки:
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)
}
И, наконец, так я называю это:
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)
}
Проблема в том, что я ожидал, что мои теги bson
будут работать магически, но они этого не делают.
Вместо сохранения данных как:
{ "_id": ObjectId ( "53700d9cd83e146623e6bfb4" ), "resource_id": 7660708, "word": "Foo"...}
Он сохраняется как:
{ "_id": ObjectId ( "53700d9cd83e146623e6bfb4" ), "id": "," resourceid": 7660708, "word": "Foo"...}
Как я могу это исправить?
Ответы
Ответ 1
Измените запись на:
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"`
}
Синтаксис тегов Struct не использует запятые между тегами. Я считаю, что это должно исправить это.
Ответ 2
type Entry struct {
Id bson.ObjectId `bson:"_id,omitempty" json:"id"`
ResourceId int `json:"resource_id" bson:"resource_id"`
Word string `json:"word"`
Meaning string `json:"meaning"`
Example string `json:"example"`
}
Вместо Count() и Insert() вы можете использовать UpsertId, который делает именно это, если существует Id, запись заменяется, если она не вставлена.
Вставить() с пустым ObjectId, позволяет MongoDB обрабатывать идентификатор Id.
Изменить:
Неверный запрос вашего графа.
У вас также есть ошибка.
Он должен быть "resource_id" не "resourceid", потому что вы заявили, что поле bson называется "resource_id"
Ответ 3
Обновите вашу структуру Entry как:
type Entry struct {
Id string 'bson:"_id"'
ResourceId int 'json:"resource_id,omitempty"'
Word string 'json:"word,omitempty"'
Meaning string 'json:"meaning,omitempty"'
Example string 'json:"example,omitempty"'
}
Это должно работать!