首页 > 解决方案 > 如何使用 BSON (Python) 从 MongoDB 中检索存储的数据?

问题描述

到目前为止,在下面的代码中,我设法将数据存储到 mongoDB 中。现在我希望能够检索我存储的数据。如您所见,我一直在尝试,但不断出现错误。使用 BSON,我是否必须首先解码数据才能从 mongoDB 中检索它?任何帮助将不胜感激!(抱歉代码乱七八糟,我只是通过反复试验练习)

import json
from json import JSONEncoder

import pymongo 
from pymongo import MongoClient

from bson.binary import Binary
import pickle

#Do this for each 
client = MongoClient("localhost", 27017)

db = client['datacampdb']
coll = db.personpractice4_collection  #creating a collection in the database 
#my collection on the database is called personpractice4_collection 

class Person:
    def __init__(self, norwegian, dame, brit, german, sweed):
        self.__norwegian = norwegian
        self.__dame = dame
        self.__brit = brit
        self.__german = german #private variable 
        self.__sweed = sweed
 
   # create getters and setters later to make OOP
 
personone = Person("norwegian", "dame", "brit", "german","sweed")  

class PersonpracticeEncoder(JSONEncoder): 
        def default(self, o):
            return o.__dict__
    

#Encode Person Object into JSON"
personpracticeJson = json.dumps(personone, indent=4, cls=PersonpracticeEncoder)
practicedata = pickle.dumps(personpracticeJson)
coll.insert_one({'bin-data': Binary(practicedata)})

#print(personpracticeJson)
#print(db.list_collection_names()) #get then names of my collections in DB 



#retriving data from mongodb 
#Retrieving a Single Document with find_one()
print(({'bin-data': Binary(practicedata)}).find_one()) #not working 

标签: pythonmongodbbinarypymongobson

解决方案


find_one方法应该在集合上调用

{'bin-data': Binary(practicedata)}是查找文档的查询

coll.find_one({'bin-data': Binary(practicedata)})

女巫的意思是:在集合中找到一个文档,coll其中bin-data等于Binary(practicedata)


推荐阅读