2016-07-28 11 views
1

MongoDBのmgoドライバを使ってRESTful APIを開発しています。mgo:タイプ番号(int、float64)のフィールドが見つかりません。

問題は、型intのフィールドでドキュメントを取得しようとしていて、結果が返されないということです。これは、すべての文書を返しますが、モンゴシェルで同じことをやってする文書を返しません

conn.Session. 
    DB("face"). 
    C("papers"). 
    Find(bson.M{"rating": 2.9}). 
    All(&papers) // papers is an instance of a slice struct. 

:で

{ 
    "_id" : ObjectId("5797833e9de6f8c5615a20f9"), 
    "id" : "28743915-9be0-427d-980d-5009bfe1b13a", 
    "name" : "Hunter", 
    "rating" : 2.9, 
    "downloads" : 5040 
} 

そして、この文書を取得しようとしている:私はこの文書を持っている。例えば

たとえば、

db.papers.find({"rating": 2.9}) 

これをmongoシェルで実行すると、 NY文書:

db.papers.find({"rating": "2.9"}) 

だから私は問題はbson.Mが連載されているときにそのbson.Mがマップ[文字列]インターフェース{}であるので、それは、文字列に値を変換するかもしれないことかもしれないと思います

これは紙の構造体が

type Paper struct { 
    ID   string   `json:"id,omitempty" bson:"id"` 
    Name  string   `json:"name,omitempty" bson:"name"` 
    Rating  float64  `json:"rating" bson:"rating"` 
    Downloads int   `json:"downloads" bson:"downloads"` 
} 
+0

あなたは私たちに 'papers'がスライスでの構造体の宣言を示してもらえますか? –

+0

はい私はそれを追加することができますが、代わりに名前で検索しようとすると問題がどこにあるかは考えません。bson.M {"name": "Hunter"}。 – user3589262

答えて

0

どのように見えるかである私はあなたの問題とすることはできませんが何であるかを理解しようとしています。ほとんどの紛らわしい部分は、私はint型のフィールド

  • 検索(bson.M {:2.9 "評価"})で文書をフェッチしようとしている問題の説明

    1. です。

    2. "評価":2.9

    世界2.9が整数でありますか?

    1. タイプnumber(タイトルに記載されています)、ゴー、モンゴーはありません。
    2. あなたはそれがdouble
    3. としてモンゴに挿入されていますmgofloat64を挿入している場合あなたはstringクエリでdoubleを照会することはできません。たとえ"rating": 2.9という少数の書類があっても、db.papers.find({"rating": 2.9})は書類とdb.papers.find({"rating": "2.9"})を返します。

    mgoでもmongoでもエラーはありません。興味のある方は、ここでマップを挿入し、あなたのPaperクラスを使用してデータを取得するサンプルコードは次のとおりです。

    package main 
    
    import (
        "gopkg.in/mgo.v2" 
        "gopkg.in/mgo.v2/bson" 
        "fmt" 
    ) 
    
    type Paper struct { 
        ID   string   `json:"id,omitempty" bson:"id"` 
        Name  string   `json:"name,omitempty" bson:"name"` 
        Rating  float64  `json:"rating" bson:"rating"` 
        Downloads int   `json:"downloads" bson:"downloads"` 
    } 
    
    func main() { 
        session, err := mgo.Dial("mongodb://127.0.0.1:27017/face") 
    
        if err != nil { 
         panic(err) 
        } 
        defer session.Close() 
        session.SetMode(mgo.Monotonic, true) 
    
        c := session.DB("face").C("papers") 
        c.Insert(bson.M{ 
         "id": "28743915-9be0-427d-980d-5009bfe1b13a", 
         "name": "Hunter", 
         "rating": 2.9, 
         "downloads": 5040, 
        }) 
    
        var papers []Paper 
        c.Find(bson.M{"rating": 2.9}).All(&papers) // equivalent of db.papers.find({"rating": 2.9}) 
        fmt.Printf("%+v\n", papers) 
    } 
    
  • 関連する問題