如何在PyMongo中执行等效的SQL连接?或者更具体地调用BSON代码中的Pymongo集合对象?

2024-06-16 11:12:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在pymongo中执行一个SQL Join等效程序,如下所示: http://blog.knoldus.com/2013/02/03/joins-now-possible-in-mongodb/

问题是,我被卡住了,因为bson无法对集合对象进行编码。在

bson.errors.InvalidDocument: Cannot encode object: Collection(Database(MongoClient('localhost', 27017), 'Application'), 'Products')

所有相关代码:

^{pr2}$

Tags: 对象in程序comhttpsqlmongodbblog
1条回答
网友
1楼 · 发布于 2024-06-16 11:12:02

虽然我不确定您的模式,但您不能将对MongoDB集合的本地Python引用传递给Code对象并使其在数据库服务器上可用。您可以传递一个scope对象,但在这里,这不是您需要的。最终,代码只是Javascript,因此它需要本地/本机访问Products集合。在

不过,有人提醒我,从2.4+开始,再也不能从MapReduce访问其他集合/数据库/碎片了。因此,您不能访问同一集合或不同集合中的其他文档,也不能从map或reduce函数访问其他文档。在

如果你寻找joins、map reduce、mongodb等,你会在网上找到很多建议,它们会将多个步骤的map reduce放入同一个集合中。这不简单,也不一定有效。在

从代码中看,您似乎只是在尝试快速查找产品名称。有很多方法可以在不需要连接的情况下优化它。我建议在本地缓存名称,当这不起作用时,使用$in运算符收集一组产品,并使用投影将结果限制在所需的最小字段(例如name),然后缓存这些结果。。。然后用Python在客户机上执行一个“local”连接(在这种连接中,如果交付类需要,获取name值并将其输出为类似“虚拟”的属性,或者在客户端使用它时将其输出到下游的某个地方)。在

由于MongoDB故意不支持连接,所以通常最好考虑一下您的集合和文档结构是否适合您需要的模式。在

您也可以在MongoDB控制台中创建map reduce函数。

相关问题 更多 >