2014-02-05 4 views
-3

mongodb에서 2 개의 모음을 어떻게 조인합니까?Mongodb에서 조인하는 법 SQL에서 수행하는 방법을 알고 있습니다

나는 필드 FK_IDcollection2collection1입니다.

는 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을 사용하여 문서를 참조 할 수 있습니다. Think NoSQL. 보조 노트에

: 당신은 작업이 지원되는 알고 설명서를 읽어 구문을 추측 할 수 MongoDB 문서는 당신이이 부속으로 가입 대체 할 수있는,

+0

도움이 될 수도 있습니다 : http://docs.mongodb.org/manual/reference/sql-comparison/ –

0

기본적으로 매우 포괄적이다.

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

이 모든 criteria 일치하는 사용자와 모든 게시물을 발견 할 것이다 : MongoDB를하지 않는 동안 '지원'만 파국적 결과의 스키마 (의사 코드)를 파괴하지 않고, 부속 선택과 유사 뭔가을 지원, 조인 $in을 통해 SQL과 달리 결과 (다른 클래스에 매핑 된 결과)는 단일 결과 BLOB에 번지는 않지만 사용자 목록을 얻고 다른 요청을 통해 해당 게시물을 얻습니다. 반면에 사전에 사용자를 저장하고 게시물에 매핑하여 애플리케이션 코드에 완전히 채워진 도메인 모델을 구축해야 할 수도 있습니다.

그러나 NoSQL을 사용할 때 그런 쿼리를 피하려고 시도해야한다는 것을 이해하는 것이 중요합니다. 가능한 경우 정보를 비정규 화하십시오. 예를 들어 authorId을 게시물에 저장하는 대신 authorName도 저장하십시오. 이렇게하면 게시물 목록을 더 쉽고 빠르게 표시 할 수 있지만 변경 사항을 작성자 이름과 동기화하는 등의 대가를 치르게됩니다. 다른 경우에는 정보를 임베드 할 수도 있습니다. 예를 들어, tags

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

또한, 예를 들어, $in을 사용하여 삭제를 수행 할 수 있습니다, 문자열 목록 간단하게 될 수있다 db.collection.remove({"_id" : {$in : [ id1, id2, ... ] } });