2011-10-07 1 views
0

2 개의 별도 DB에 2 개의 콜렉션이 있습니다. 둘 다 배열 필드를 저장합니다.MongoDB : 배열이있는 중첩 쿼리 및 성능입니다.

요소 [A, B] 자신의 배열 분야에서 자신의 _ids이 특정 문서 _id과 모음 2의 배열 필드에 존재하는이 모든 수집 한 문서를 : 그 때문에 한 번에 모두를 조회 할 계획입니다. 예를 들어

:

문서 (컬렉션 1, DB 1) :

[{"_id":ObjectId("doc1"), "array1":["A","B"]}, {"_id":ObjectId("doc2"), "array1":["A","C"]}] 

user_docs (컬렉션 2, DB 2) :

[{"_id":ObjectId("usr1"), "array2": [ObjectId("doc1"),ObjectId("foo")]}, {"_id":ObjectId("usr2"), "array2": [ObjectId("bar"),ObjectId("baz")]}] 

나는 질의를 필요로 A, B 및 usr1이 주어진 경우 'doc1'객체를 반환합니다. 왜냐하면 A, B가 array1 필드에 있고 usr1이 array2 필드에 있기 때문입니다.

A, B가 하나의 쿼리에 있고 모든 usr1의 문서가 다른 쿼리에있는 모든 문서를 가져올 수 있으며 응용 프로그램 수준에서 공통 요소를 찾을 수 있지만 MongoDB를 사용하여 더 나은 방법이 있습니까?

도움 주셔서 감사합니다.

답변

0

좋아요. 당신의 설명에서 무엇을하려고하는지 정확히 이해하고 있는지 모르겠습니다. 하지만 난 왜 당신이 데이터를 쿼리하는 것이 이해가 안 돼요 이건 그냥 내게 매우 무거운 것 같은데요 왜 당신은 같은 데이터베이스에 두 데이터 세트를 저장할 수 없습니다. 필요한 경우 나중에 언제든지 분리 할 수 ​​있습니까? Im은 이것이 당신의 막연한 문제를 해결할 지 확신하지 못하지만 시작할 좋은 곳이 될 것입니다.

행운을 빕니다.

0

가입 할 가능성이 없으므로 MongoDB를 두 번 쿼리해야합니다. 응용 프로그램 수준에서 수행해야합니다. 비정규화할 수 있다면해라. 하나의 쿼리 만 수행 할 수 있도록 포함 된 문서에 필요한 데이터를 캐싱합니다.

저는 @amonn이 옳다고 생각합니다. DB를 통해 쿼리 할 필요가 없습니다.