2016-09-26 9 views
1

Я занимаюсь созданием приложения, где мой задний конец находится в go lang, а база данных - mongoDB. Моя проблема заключается в том, что у меня есть карта в моих структурах объявлена ​​какНужна помощь в сохранении карты интерфейса типа в моей базе данных mongodb с помощью golang

Data struct { 
     data map[interface{}]interface{} 
} 

после добавления значения к этому, как

var data Data 
    data["us"]="country" 
    data[2]="number" 
    data["mother"]="son" 

я м вставив его, как

c.Insert(&data) 

Когда я вставить этот im теряют мой ключ и могут видеть только значения ...

{ 
    "_id" : Object Id("57e8d9048c1c6f751ccfaf50"), 
    "data" : { 
     "<interface {} Value>" : "country", 
     "<interface {} Value>" : "number", 
     "<interface {} Value>" : "son" 
    }, 

} 

Могу ли я узнать любой способ использования интерфейса и получить как ключ, так и значения в моем mongoDB. Спасибо ....

+0

Ваши ключи на карте будут «правильными»? Используйте интерфейс map [string] {} '. Или, если вы уверены в типе данных (т. Е. Ваше значение всегда является строкой, просто используйте 'map [string] string') – KBN

ответ

1

Вы можете использовать только string в качестве ключа в документах MongoDB. Даже если бы вы определили свою структуру Data как map[int]interface{} Mongo (не знаю, будет ли mgo конвертировать типы) не позволит вам вставить этот объект в базу данных. На самом деле, вы можете использовать только string как ключ JSON вообще, так как это не будет JSON (попробуйте в консоли вашего браузера следующий код JSON.parse('{2:"number"}')).

Так определить свой Data как bson.M (ярлык для map[string]interface{}) и использовать strconv пакет для преобразования чисел в строки.

Но я думаю, вы должны посмотреть на массивы/срезы, так как только одна причина, по которой кому-то может понадобиться число в качестве ключей в JSON, - это итерации через эти поля в будущем. И для итераций мы используем массивы.

Обновление: только что подтверждено, как mgo занимается с map[int]interface{}. Он вставляет в запись DB, как {"<int Value>" : "hello"}. Где <int Value> не является номером, а фактически string <int Value>

+0

Спасибо ..... спасли мой день .... –

 Смежные вопросы

  • Нет связанных вопросов^_^