有没有一种方法可以直接在mongoDB中存储python对象而不序列化它们

有没有一种方法可以直接在mongoDB中存储python对象而不序列化它们,python,mongodb,pymongo,bson,Python,Mongodb,Pymongo,Bson,我在某个地方读到,您可以使用BSON在MongoDB中将python对象(更具体地说是字典)存储为二进制文件。但是现在我找不到任何与此相关的文档 有人知道这是怎么做到的吗?假设您对mongoDB没有特别的兴趣,那么您可能不会寻找BSON。与JSON相比,BSON只是一种不同的序列化格式,旨在提高速度和空间效率。另一方面,pickle对python对象进行了更多的直接编码 但是,在采用pickle之前,请先进行速度测试,以确保它更适合您的用例。如果不序列化对象,就无法将其存储在文件(数据库)中。如

我在某个地方读到,您可以使用BSON在MongoDB中将python对象(更具体地说是字典)存储为二进制文件。但是现在我找不到任何与此相关的文档


有人知道这是怎么做到的吗?

假设您对mongoDB没有特别的兴趣,那么您可能不会寻找BSON。与JSON相比,BSON只是一种不同的序列化格式,旨在提高速度和空间效率。另一方面,
pickle
对python对象进行了更多的直接编码


但是,在采用pickle之前,请先进行速度测试,以确保它更适合您的用例。

如果不序列化对象,就无法将其存储在文件(数据库)中。如果数据需要从一个进程移动到另一个进程或另一台服务器,则需要以某种形式对其进行序列化以进行传输。因为您询问的是MongoDB,所以数据绝对会以某种形式序列化,以便存储在MongoDB数据库中。当使用MongoDB时,它是

如果您实际询问是否有办法在MongoDB文档中存储Python对象的更原始形式,则可以在文档中插入一个
Binary
字段,该字段可以包含您想要的任何数据。在这种形式下,它不能以任何方式直接查询,因此您可能会失去使用NoSQL文档数据库(如MongoDB)的许多好处

>>> from pymongo import MongoClient
>>> client = MongoClient('localhost', 27017)
>>> db = client['test-database']
>>> coll = db.test_collection    
>>> # the collection is ready now 
>>> from bson.binary import Binary
>>> import pickle
>>> # create a sample object
>>> myObj = {}
>>> myObj['demo'] = 'Some demo data'
>>> # convert it to the raw bytes
>>> thebytes = pickle.dumps(myObj)
>>> coll.insert({'bin-data': Binary(thebytes)})

你到底想做什么,做了什么,什么不起作用,一点也不清楚。请编辑问题以包含这些有用的详细信息。:)如果您这样做是为了性能,可能会让您大吃一惊。@thg435:谢谢您提供的链接,对于一个I/O对我的项目性能更为关键的项目,我会记住它@thg435:对我来说,主要的问题是我严重依赖numpy数据类型的序列化,python的json模块不支持这种序列化。另外,使用Pickle(如答案中所建议的)可能会有一些问题:。总而言之-代码的安全性和可维护性问题。感谢您的详细回答!毕竟,我认为我将坚持使用
pickle
序列化来构建JSON对象。它为包含相同字符串的集合输出相同的字符串,这对我来说非常关键。此外,我对数据库的I/O不是我代码中性能最关键的部分。示例代码中有一个输入错误:它应该在最后一行之前读取pickle.dumps(myObj)。谢谢,pickle.dumps(obj)为我工作()我想应该随着pickle现在的更改而更改答案,它应该是pickle.dumps(obj),而不是pickle.dump(obj)那么,如果我们想再次从Mongo读取数据,需要什么样的预处理呢?