#mongodb #go #mgo
#mongodb #Вперед #mgo
Вопрос:
В настоящее время я работаю в проекте Go и использую mongo с gopkg.in/mgo.v2
у меня возникают проблемы с извлечением значений из базы данных, у меня есть структура, подобная:
type person struct {
Name string
Age int
MyMap map[string]interface{}
}
Позже у меня есть функция, которую я вызываю для получения результатов (ее часть интерфейса):
func(m SomeInterface) Get(filter bson.M, target interface{}){
collection := m.Db.C("myCollection")
err := profilesCollection.Find(filter).One(val)
if err != nil {
panic("error reading from mongo")
}
}
и я вызываю эту функцию как:
p := person{}
myinterface.Get(somefilter, amp;p)
После выполнения этого p.myMap имеет тип bson.M
и не map[string]interface{}
…почему? и как я мог бы получить вместо этого карту, а не bson.M? Спасибо
Комментарии:
1. 1) они одного типа;
bson.M
естьmap[string]interface{}
; 2) вам следует отказаться от mgo.v2, поскольку он устарел и больше не поддерживается.2. Драйвер использует
bson.M
для разархивирования, если вы передаетеinterface{}
. Если вам нужноmap[string]interface{}
, вам придется преобразоватьbson.M
вmap[string]interface{}
путем рекурсивной обработки и копирования данных.3. @Adrian да, я читал это, это очень большой проект, и я им не владею, поэтому его сложно перенести. Итак, должен ли я использовать что-то вроде json marshal / unmarshal, чтобы правильно назначить ее моей структуре?
4. @BurakSerdar нет, ты этого не делаешь. Типы равны, вы можете просто ввести convert
m := map[string]interface{}(myBsonM)
.5. Это просто: play.golang.org/p/bCqhJAIQ_4_S