2016-10-19 1 views
1

문제점이 있으며 서버 코드에서 MongoDB 집계 프레임 워크 또는 MapReduce 레벨에서 해결할 수 있는지 알고 싶습니다. 문제 : 내가 가진를 a를 다음과 모음 :MongoDB의 배열되지 않은 배열 요소로 그룹화하기

[ 
    { 
    id:..., 
    pages:[ 
     000, 
     111, 
     222, 
     666, 
     999.... 
    ] 
    }, 
    { 
    id:..., 
    pages:[ 
     111, 
     666, 
     999.... 
    ] 
    }, 
    . 
    . 
    . 
] 
나는이 경로를 요청할 수 있도록하려면

: 111, 999 및 집계가 카운트 2의 반환, 왜!? 왜냐하면 111과 999가이 순서로 두 개의 문서에 나타나고 그 사이의 요소 수에 관계없이. 또한 000, 222, 999를 요청할 수 있기를 원합니다.이 순서의 세 배열 요소가 하나의 문서에만 나타나기 때문에이 요소는 1 (개수) 만 반환합니다.

주문이 내 케이스의 필수 항목입니다. 페이지가있는 다른 문서가있는 경우 : [999, 666, 111] $ 666, 999 달러를 모두 찾고 싶습니다.이 문서가 , 666은 666과 동일하지 않습니다 999 때문에이 배열을 정렬 할 수 있다는 것을 의미 999

는, 순서가 중요, 결과 나는 주어진 요소를 포함하는 배열을 찾으려하지만,이 순서

나는 내 문제를 적절하게 설명했기를 바란다 ... MongoDB 수준에서 그것을 수행하는 가장 좋은 방법은 무엇입니까, 집계입니까? 아니면지도를 줄이거 나 '코딱지는 가능한가?' 미리

답변

0

모든 연산자 필드의 값이 지정된 모든 요소들을 포함하는 배열 인 문서를 선택한다 $에

감사합니다. 정렬 식 검사 관련

db.Test6.count({pages: {$all: [111, 999]}}); // 2 
db.Test6.count({pages: {$all: [000, 222, 999]}}); // 1 

https://docs.mongodb.com/master/reference/operator/query/all/

, 내 제안은 배열이 이미 (이 빨리 할/쿼리가 더 쉬운 것) 주문되어 있다고 가정하는 것입니다. 내가 할 수없는, https://docs.mongodb.com/master/reference/operator/update/sort/#up._S_sort

+0

대, 덕분에 많이 나는 – shbeita

+0

OK, 나는 아직 여기에 문제가 있음을하려고합니다 :

배열을 정렬해야하기 위해, 당신은 당신이 요소를 누르면 것을 보장한다 111, 999가 999, 111과 같지 않기 때문에 배열을 정렬하십시오. 배열을 정렬하면 항상 111, 999가되지만 내 경우에는 코딱지가됩니다. – shbeita

+0

내가 실제로 원하는 것은 $ all이지만 요소의 순서를 고려하면 – shbeita