2016-09-26 4 views
1

バックエンドがgo langでデータベースがmongoDBのアプリケーションを作成するプロセスで使用しています。私の問題は、私はこれを挿入すると、私の構造体のマップがgolangを使用して、mongodbデータベースにインタフェースタイプのマップを格納するのに助けが必要

c.Insert(&data) 

のように、このような

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

私はそれを挿入Mにして値を追加した後

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

のように宣言しているということです私の鍵を失って、値だけを見ることができます...

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

} 

私はmongoDBでインターフェイスとキーと値の両方を取得する方法を知っているかもしれません。ありがとう....

+0

あなたのキーは 'string'でしょうか? 'map [string] interface {}'を使ってください。または、データ型が特定の場合(つまり、値が常に文字列の場合は、 'map [string] string'を使用してください) – KBN

答えて

1

string以外は、MongoDBドキュメントのキーとして使用できます。 Data構造体をmap[int]interface{} Mongo(mgoが型を変換するかどうかわからない)として定義しても、このオブジェクトをデータベースに挿入することはできません。実際には、stringをJSONキーとして使用することはできません。これはJSONではないためです(ブラウザのコンソールで次のコードJSON.parse('{2:"number"}')を試してみてください)。

Databson.M(ショートカットはmap[string]interface{})と定義し、数字を文字列に変換するにはstrconvパッケージを使用してください。

しかし、JSONでキーとして数字を使用する必要がある理由の1つに、これらのフィールドを将来的に反復する必要がある理由の1つとして、配列/スライスを調べる必要があります。反復の場合、配列を使用します。

更新:ちょうどがmap[int]interface{}をどのように処理するかチェックしました。それは{"<int Value>" : "hello"}のようなDBエントリに挿入されます。 <int Value>は数字ではありませんが、実際にはstring <int Value>

+0

ありがとうございました。 –

関連する問題