2016-12-20 7 views
8

के साथ आईडी द्वारा खोजें मैं _id द्वारा एक डेटा खोजना चाहता हूं। मुझे पता है कि यह डेटा मौजूद है और यह _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

लेकिन मैं इसे पाइटमोंगो और पायथन का उपयोग कर पा सकता हूं।

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

किसी को भी किसी भी विचार है:

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) 

यहाँ परिणाम कर रहे हैं?

संपादित करें: मैं के साथ की कोशिश की है:

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() का उपयोग करें और तो आप केवल आईडी मान पास, या आप 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 फ़ील्ड के मान के रूप में) देखते हैं, तो इसका मतलब है कि इस आईडी को रखने वाले दस्तावेज़ में फ़ील्ड का एक अलग नाम है।

यह बताएं कि यह आपके मोंगोडीबी में कैसे संग्रहीत है, struct tags का उपयोग करें। जैसे यदि आपका MongoDB में यह "myid" कहा जाता है, तो आप इसे इस तरह से मैप कर सकते हैं:

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

इसके अलावा, ध्यान दें कि आप MongoDB सर्वर से हर बार जब आप कुछ डेटा क्वेरी करना चाहते हैं कनेक्ट नहीं करना चाहिए बजाय एक बार कनेक्ट करते हैं, और बस का पुन: उपयोग अधिवेशन। विवरण के लिए देखें: mgo - query performance seems consistently slow (500-650ms)

+0

नोट के लिए धन्यवाद लेकिन आईडीक्यूकी _id – user462794

+0

@ user462794 नहीं है कृपया संपादित उत्तर देखें। यदि आप 'FindId() 'का उपयोग करते हैं, तो आपको केवल आईडी मान पास करना होगा (और' bson.M' में लपेटा नहीं गया है)। या 'ढूंढें() 'का उपयोग करें और फिर आप' bson.M' में लिपटे आईडी को पास कर सकते हैं। – icza

+0

मेरे पास अभी भी 0 है: INFO: 2016/12/20 15:42:08 कुकी_आईडी.go: 147: 1 जानकारी: 2016/12/20 15:42:08 कुकी_आईडी.go: 14 9: 2 जानकारी: 2016/12/20 15:42:18 कुकी_आईडी.go: 87: डेटा जानकारी: 2016/12/20 15:42:18 कुकी_आईडी.go: 88: {0} जानकारी: 2016/12/20 15:42:18 Cookie_Id.go: 89: 0 जानकारी: 2016/12/20 15:42:18 कुकी_आईडी.go: 118: 0 जानकारी: 2016/12/20 15:42:18 कुकी_आईडी.go: 128: ठीक – user462794

संबंधित मुद्दे

 संबंधित मुद्दे