我想通过查找数据_id。我知道该数据存在并且_id存在(我已经用pymongo测试了它)。
_id
但是下面的代码找不到它:
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。
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
您可以使用Collection.FindId()然后仅传递id值,或者使用Collection.Find(),然后还必须使用字段名称指定一个值:
Collection.FindId()
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的文档中的字段具有不同的名称。
id_cookie.IdCookie
使用struct标记来告诉它如何存储在您的MongoDB中。例如,如果在您的MongoDB中将其称为"myid",则可以这样映射它:
"myid"
type id_cookie struct { IdCookie int `bson:"myid"` }
还要注意,您不应在每次要查询某些数据时都连接到MongoDB服务器,而应该连接一次并重用会话