2016-12-20 9 views
8

私は_idでデータを見つけたいと思っています。私はこのデータが存在し、この_idが存在することを知っています(私はpymongoでそれをテストしました)。idで検索mgo

しかし、以下のコードは、それを見つけることができません:

type id_cookie struct { 
    IdCookie int 
} 

func get_id_mongo() int { 
    session, err := mgo.Dial("127.0.0.1") 
    if err != nil { 
     panic(err) 
    } 
    defer session.Close() 

    // Optional. Switch the session to a monotonic behavior. 
    session.SetMode(mgo.Monotonic, true) 

    c := session.DB("id_bag").C("id_cookie") 
    data := id_cookie{} 
    err2 := c.FindId(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data) 
    if (err2 != nil){ 
     Info.Println("error") 
     Info.Println(err2) 
    } 
    Info.Println(data) 
    return data.IdCookie 
} 

をそれはちょうど私に0を返します。

しかし、私はpytmongoとpythonを使って見つけることができます。ここ

import requests 
import pymongo 
from pymongo import MongoClient 
from bson.objectid import ObjectId 
from pprint import pprint 
client = MongoClient('127.0.0.1', 27017) 

import base64 



db = client.id_bag 
pprint(db.collection_names()) 
result = db.id_cookie.insert_one(
    { 'IdCookie': 1 
    }) 
print(result.inserted_id) 

data = db.id_cookie.find_one({"_id": ObjectId("58593d1d6aace357b32bb3a1")}) 
print(data) 

は結果である:

['id_cookie', 'system.indexes'] 
58593d2d6aace357b32bb3a3 
{'IdCookie': 1, '_id': ObjectId('58593d1d6aace357b32bb3a1')} 

誰がどんな考えを持っていますか?

編集: 私がしようとしました:

err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) 

が、私はまだ0を持っている:

INFO: 2016/12/20 15:42:08 Cookie_Id.go:147: 1 
INFO: 2016/12/20 15:42:08 Cookie_Id.go:149: 2 
INFO: 2016/12/20 15:42:18 Cookie_Id.go:87: data 
INFO: 2016/12/20 15:42:18 Cookie_Id.go:88: {0} 
INFO: 2016/12/20 15:42:18 Cookie_Id.go:89: 0 
INFO: 2016/12/20 15:42:18 Cookie_Id.go:118: 0 
INFO: 2016/12/20 15:42:18 Cookie_Id.go:128: OK 

答えて

7

あなたはCollection.FindId()を使用するかして、あなただけのid値を渡すか、​​を使用しますフィールド名を指定して値を指定する必要があります。

err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) 

// OR 
err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}). 
    One(&data) 

エラーが表示されない場合は、文書が見つかったことを意味します。

0が表示されている場合(id_cookie.IdCookieフィールドの値)、つまり、このIDを持つ文書のフィールドの名前が異なることを意味します。

struct tagsを使用して、MongoDBにどのように格納されているかを確認してください。例えば。あなたのMongoDBの中でそれが"myid"呼び出された場合、あなたはこのようにそれをマップすることができます。

type id_cookie struct { 
    IdCookie int `bson:"myid"` 
} 

はまた、あなたが一度接続して、ちょうど再利用代わりに、MongoDBのサーバーにあなたには、いくつかのデータを照会するたびに接続してはならないことに注意してくださいセッション。詳細はmgo - query performance seems consistently slow (500-650ms)

+0

ありがとうございますが、IdCookieは_idではありません – user462794

+0

@ user462794編集した回答をご覧ください。 'FindId()'を使うと、id値を渡すだけで( 'bson.M'でラップされていない)ことができます。あるいは 'Find()'を使うと、 'bson.M'で囲まれたidを渡すことができます。 – icza

+0

私はまだ0:情報:2016/12/20 15:42:08 Cookie_Id.go:147:1 情報:2016/12/20 15:42:08 Cookie_Id.go:149:2 情報:2016/12/20 15:42:18 Cookie_Id.go:87:データ 情報:2016/12/20 15:42:18 Cookie_Id.go:88:{0} 情報:2016/12/20 15:42:18 Cookie_Id.go:89:0 情報:2016/12/20 15:42:18 Cookie_Id.go:118:0 情報:2016/12/20 15:42:18 Cookie_Id.go:128:OK – user462794

関連する問題