2012-03-20 7 views
0

同じようなパラメータには、最初のコレクションの名前と2番目のコレクションの名前(データベースのMongoDBコレクション)を持つPythonでスクリプトを作成する必要があります。私はフィールドのいくつかの渡された名前(これらの2つのコレクションの間でJOINを実行する必要があります(私はコレクションの構造を知らず、十分にジェネリックである必要があります)。私はMing、MongoKit、MongoAlchemy、MongoEngine、minimongoのようなORMを見た。 http://api.mongodb.org/python/current/tools.html#orm-like-layers 誰もORMsやJOINS、アドバイス、例を経験したことがありますか?JOIN MongoDBコレクションのORMが必要

+0

レコード間に直接のリンクを持つNoSQLソリューションを見てください:RiakとNeo4jのようなグラフデータベース。しかし、文字通り「コレクションの構造を知らない」_ – aitchnyu

答えて

2

MongoDBマッパー/ ORMソリューションは、リレーショナルデータベースに関連付けられている機能であり、NoSQLベースのORM(たとえば、MongoDBでそれらを一貫して実行する方法がない)がないため、JOINのような動作を可能にすることはほとんどありません。率直に言って、ORMがあなたのためにJOINのような振る舞いを実装しているとすれば、おそらくそれは設計上の欠陥だと思うでしょう。

pyスクリプトで、要求された機能を自分で実装するのを止めるのはなぜですか?

+0

コレクションは非常に大きいので、私はメモリなしで滞在することを恐れています。私はおそらくチャンクでこれを行うことができますが、それは非常に遅くなるでしょう、私はおそらくより洗練された解決策があるとhooped – Damir

+2

非リレーショナルデータベースで動作するものがORMであると主張するならば、 「ORM」の「R」が最初に何を表しているのかはわかりません。 – geoffspear

+0

@Damirメモリ内のすべてを最初に読み取る必要はありません。それをバッチで行います。あなたができないメモリ使用に関して、マッパは何をすることができますか? –

1

ジョインは実際にはできないので、あなたが探しているものではありません。ドライバーやORM/ODM(Morphia for JavaやMongoid for Rubyなど)で一般的に利用できるのは、別のコレクション内のオブジェクトを指すIDまたはIDのリストがある参照です。次に、逆参照(参照用に別のクエリーを実行)するヘルパー関数が通常あります。そのため、含まれているオブジェクトを明示的に処理することなく戻すことができます。

実際にはpythonドライバにこれが自動的に実行できる機能があります。ここでは、単体テストに更新されました - 他の例は古いものです: https://github.com/mongodb/mongo-python-driver/blob/master/test/test_dbref.py

関連する問題