web-dev-qa-db-ja.com

MGOを使用してIDで検索

_idでデータを検索したい。このデータが存在し、この_idが存在することを知っています(pymongoでテストしました)。

しかし、以下のコードはそれを見つけません:

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
11
user462794

Collection.FindId() を使用してから、id値のみを渡すか、または Collection.Find() を使用してから、フィールド名を含む値:

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サーバーに接続するのではなく、1回だけ接続して、セッションを再利用する必要があることにも注意してください。詳細は以下を参照してください: mgo-クエリのパフォーマンスが一貫して遅いようです(500-650ms)

15
icza