2012-03-20 83 views
0

我必須在Python中創建腳本,其中參數具有第一個集合的名稱和第二個集合的名稱(db中的MongoDB集合)。我需要在這兩個集合之間對一些傳入的字段名稱執行JOIN(我不知道集合的結構並且需要足夠通用)。我查看了像Ming,MongoKit,MongoAlchemy,MongoEngine和minimongo的ORMs http://api.mongodb.org/python/current/tools.html#orm-like-layers 有沒有人有任何這些ORM和JOINS的經驗,有任何建議,例子?需要ORM for JOIN MongoDB集合

+0

我想你可能不得不看看記錄之間有直接聯繫的NoSQL解決方案:Riak和像Neo4j這樣的圖形數據庫。但是,當你字面意思是「不知道收藏的結構」時,他們不會幫助。_ – aitchnyu 2012-03-20 10:52:15

回答

2

MongoDB映射器/ ORM解決方案不太可能允許JOIN類行爲,因爲它是與關係數據庫關聯的功能,並且在基於NoSQL的ORM中沒有位置(例如,在MongoDB中沒有辦法一致地執行它們)。坦率地說,如果ORM爲你實現JOIN行爲,我可能會認爲它是一個設計缺陷。

什麼阻止你在py腳本中自己實現所需的功能?

+0

收藏非常大,所以我害怕留下沒有記憶。我可以大概做到這一點,但它會很慢,我諷刺說,有可能是更優雅的解決方案 – Damir 2012-03-20 10:16:11

+2

如果使用非關係數據庫的東西聲稱是ORM,我會非常懷疑從作者開始不知道「ORM」中的「R」代表什麼。 – geoffspear 2012-03-20 10:21:28

+0

@達米爾你不必首先閱讀內存中的所有東西。分批進行。根據內存使用情況,映射器可以做些什麼,而不是? – 2012-03-20 10:28:42

1

A加入不是你要找的,因爲你不能真正加入。通常在驅動程序或ORM/ODM(例如Morphia for Java和Mongoid for Ruby)中可用的是Reference,其中有一個ID或ID列表指向另一個集合中的對象。然後,通常需要一個輔助函數來取消引用(對參考運行另一個查詢),以便您可以將該包含的對象帶回來,而無需明確執行。

python驅動程序中實際上有一個功能,可以自動完成此功能。這裏是一個例子(更新到單元測試 - 其他例子是舊的): https://github.com/mongodb/mongo-python-driver/blob/master/test/test_dbref.py