2014-02-05 33 views
-3

如何在MongoDB中加入2個集合?如何在Mongodb中加入我知道如何在SQL中執行

我有一個字段FK_IDcollection2其中引用collection1

在SQL我用來做

SELECT * FROM collection1 c1 JOIN collection2 c2 on c2.FK_ID = c1.ID 

將這項工作?

db.collection1.join(collection2, {collection1.ID:collection2.FK_ID}) 

或者圍繞這些線? 謝謝

+0

也可以用連接刪除嗎? – jamesb

回答

1

不,它不工作。 MongoDB不支持連接,一次只能查詢一個集合。你需要開始以NoSQL的方式思考,換句話說,考慮使用embedded documents,如果你不能,那麼你可以用DB References來引用文檔。認爲NoSQL。

在邊注:你無法猜測的語法,閱讀文檔,瞭解操作支持什麼,MongoDB文檔相當全面

+0

這可能也有幫助:http://docs.mongodb.org/manual/reference/sql-comparison/ –

0

基本上,你可以替換子查詢的聯接。雖然MongoDB的不「支持」連接,它支持的東西,是類似於子查詢,纔沒有發生災難性的破壞結果的模式(僞代碼):

users = db.users.find({criteria}); 
posts = db.posts.find({authorId : { $in : users.select(p -> p.id) } }); 

這將找到匹配criteria所有用戶和他們的所有帖子通過$in。與SQL不同,結果(映射到不同的類)不會被抹掉在單個結果blob中,而是獲得用戶列表,並通過不同的請求獲取他們的帖子。另一方面,您可能必須將用戶存儲在字典中,並將它們映射到帖子以在應用程序代碼中構建完全填充的域模型。

然而,理解您應該儘量避免使用NoSQL時那樣的查詢是至關重要的。儘可能使信息非規範化。例如,而不是隻在一個帖子中存儲authorId,而是存儲authorName。這使得顯示帖子列表更容易和更快,但是代價是必須將更改與作者姓名同步。在其他情況下,甚至可以嵌入信息。例如,tags可能是簡單的字符串列表,即

post { title:"foo", tags:["correct", "battery", "staple", "horse"] } 

您也可以使用$in進行刪除,例如db.collection.remove({"_id" : {$in : [ id1, id2, ... ] } });

相關問題