我尝试在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}$
虽然我不确定您的模式,但您不能将对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函数。
相关问题 更多 >
编程相关推荐