MongoDB의 MapReduce와 배열 요소를 일치시켜 문서를 그룹화하는 방법은 무엇입니까?

Appleshell

문자열 배열을 포함하는 열이있는 데이터베이스가 있습니다. 예시 표 :

name | words                          | ...
Ash  | ["Apple", "Pear", "Plum"]      | ...
Joe  | ["Walnut", "Peanut"]           | ...
Max  | ["Pineapple", "Apple", "Plum"] | ...

이제이 테이블을 주어진 단어 배열과 비교하고 일치율에 따라 문서를 그룹화하고 싶습니다.

예상 결과가있는 입력 예 :

// matched for input = ["Walnut", "Peanut", "Apple"]
{
  "1.00": [{name:"Joe", match:"1.00"}],
  "0.33": [{name:"Ash", match:"0.33"}, {name:"Max", match:"0.33"}]
}

map일치율을 키로 사용하여 문서를 내보내는 다음 기능을 사용하고 있습니다 .

function map() {
    var matches = 0.0;
    for(var i in input) 
      if(this.words.indexOf(input[i]) !== -1) matches+=1;
    matches /= input.length;
    var key = ""+matches.toFixed(2);
    emit(key, {name: this.name, match: key});
}

이제 누락 된 것은 내 보낸 reduceKV 쌍을 결과 객체로 결합 하는 일치 함수입니다.

나는 이것을 다음과 같이 시도했다.

function reduce(key, value) {
    var res = {};
    res[key] = values;
    return res;
}

그러나 나는 사양에 문제가 있습니다.

MongoDB는 동일한 키에 대해 축소 함수를 두 번 이상 호출 할 수 있습니다. 이 경우 해당 키에 대한 축소 함수의 이전 출력은 해당 키에 대한 다음 축소 함수 호출에 대한 입력 값 중 하나가됩니다.

... 중첩 된 결과 개체가 생성됩니다. 일치별로 문서를 그룹화하는 올바른 방법은 무엇입니까?

Joao

동일한 키에 대해 축소 기능을 두 번 이상 호출하십시오.

그것은 멱 등성 이고, 감소 함수는 그것을 존중해야합니다.

그러나 이것을 간단하게 만들기 위해지도 출력이 축소 출력과 동일한 형식인지 확인하기 만하면됩니다.

귀하의 경우 다음과 같이 작동합니다.

db.col.insert({"name": "Ash", "words": ["Apple", "Pear", "Plum"]})
db.col.insert({"name": "Joe", "words": ["Walnut", "Peanut"]})
db.col.insert({"name": "Max", "words": ["Pineapple", "Apple", "Plum"]})

function map() {

    input = ["Walnut", "Peanut", "Apple"]

    var matches = 0.0;
    for(var i in input) 
      if(this.words.indexOf(input[i]) !== -1) matches+=1;
    matches /= input.length;
    var key = ""+matches.toFixed(2);

    emit(key, {users: [{name: this.name, match: key}]});
}

function reduce(key, value) {

    ret = value[0]

    for(var i=1; i<value.length; i++){
        ret.users = ret.users.concat(value[i].users)
    }

    return ret

}

db.col.mapReduce(map, reduce, {"out": {inline:1}})

산출:

{
    "results" : [
        {
            "_id" : "0.33",
            "value" : {
                "users" : [
                    {
                        "name" : "Ash",
                        "match" : "0.33"
                    },
                    {
                        "name" : "Max",
                        "match" : "0.33"
                    }
                ]
            }
        },
        {
            "_id" : "0.67",
            "value" : {
                "users" : [
                    {
                        "name" : "Joe",
                        "match" : "0.67"
                    }
                ]
            }
        }
    ],
    "timeMillis" : 22,
    "counts" : {
        "input" : 3,
        "emit" : 3,
        "reduce" : 1,
        "output" : 2
    },
    "ok" : 1
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

배열을 객체와 일치시켜 일치하는 요소를 검색하는 방법은 무엇입니까?

분류에서Dev

MongoDB에서 동일한 객체의 배열 요소를 비교하는 방법은 무엇입니까?

분류에서Dev

각 요소의 일부 정보와 관련하여 목록의 요소를 그룹화하는 방법은 무엇입니까?

분류에서Dev

Java에서 요소의 특정 문자 위치를 기반으로 배열에서 String 요소를 찾고 표시하는 방법은 무엇입니까?

분류에서Dev

배열 요소의 시퀀스를 얻는 방법은 무엇입니까?

분류에서Dev

해시 배열의 요소 수를 얻는 방법은 무엇입니까?

분류에서Dev

C의 구조 배열에서 단일 요소를 초기화하는 방법은 무엇입니까?

분류에서Dev

Rails에서 배열 필드의 요소 수로 그룹화하는 방법은 무엇입니까?

분류에서Dev

배열의 각 요소를 다른 요소와 비교하는 방법은 무엇입니까?

분류에서Dev

모든 입력 요소를 별도의 요소로 배열에 푸시하는 방법은 무엇입니까?

분류에서Dev

동일한 경우 문자열 배열의 요소를 분할하는 방법은 무엇입니까?

분류에서Dev

PostgreSQL에서 열의 일부를 그룹화하는 방법은 무엇입니까?

분류에서Dev

기존 하위 문서를 MongoDB의 임베디드 배열로 푸시하는 방법은 무엇입니까?

분류에서Dev

MongoDB의 배열에 포함 된 단일 문서를 쿼리하는 방법은 무엇입니까?

분류에서Dev

열 이름의 일부를 그룹화하고 평균을 집계하는 방법은 무엇입니까?

분류에서Dev

폼의 체크 박스를 Node에서 배열로 그룹화하는 방법은 무엇입니까?

분류에서Dev

각 numpy 열의 0이 아닌 모든 요소를 크기가 열 수와 동일한 배열의 값에 할당하는 방법은 무엇입니까?

분류에서Dev

배열의 특정 위치에서 요소를 삭제하는 방법은 무엇입니까?

분류에서Dev

배열에서 요소의 위치를 변경하는 방법은 무엇입니까?

분류에서Dev

MongoDB 배열 쿼리는 배열의 대부분의 요소와 일치하는 문서를 반환합니다.

분류에서Dev

브러시의 범위를 부모 요소의 크기와 일치시키는 방법은 무엇입니까?

분류에서Dev

배열의 임의 위치에 요소를 효율적으로 삽입하는 방법은 무엇입니까?

분류에서Dev

Javascript 초기 배열의 새 요소를 동일한 인덱스의 배열 배열 내부의 각 배열로 푸시하는 방법은 무엇입니까?

분류에서Dev

배열에서 임의의 요소를 얻는 방법은 무엇입니까?

분류에서Dev

배열의 각 요소를 비교하고 동일한 데이터 (제 경우 날짜)를 가진 요소를 그룹화하는 방법은 무엇입니까? 자바 스크립트

분류에서Dev

Javascript의 고유 속성으로 배열의 개체를 그룹화하는 방법은 무엇입니까?

분류에서Dev

순열에 따라 시퀀스의 구성 요소를 재배 열하는 방법은 무엇입니까?

분류에서Dev

Where 절에서 문자열 배열의 요소를 검색하는 방법은 무엇입니까?

분류에서Dev

mongodb에서 배열 요소 간의 상관 관계를 유지하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    배열을 객체와 일치시켜 일치하는 요소를 검색하는 방법은 무엇입니까?

  2. 2

    MongoDB에서 동일한 객체의 배열 요소를 비교하는 방법은 무엇입니까?

  3. 3

    각 요소의 일부 정보와 관련하여 목록의 요소를 그룹화하는 방법은 무엇입니까?

  4. 4

    Java에서 요소의 특정 문자 위치를 기반으로 배열에서 String 요소를 찾고 표시하는 방법은 무엇입니까?

  5. 5

    배열 요소의 시퀀스를 얻는 방법은 무엇입니까?

  6. 6

    해시 배열의 요소 수를 얻는 방법은 무엇입니까?

  7. 7

    C의 구조 배열에서 단일 요소를 초기화하는 방법은 무엇입니까?

  8. 8

    Rails에서 배열 필드의 요소 수로 그룹화하는 방법은 무엇입니까?

  9. 9

    배열의 각 요소를 다른 요소와 비교하는 방법은 무엇입니까?

  10. 10

    모든 입력 요소를 별도의 요소로 배열에 푸시하는 방법은 무엇입니까?

  11. 11

    동일한 경우 문자열 배열의 요소를 분할하는 방법은 무엇입니까?

  12. 12

    PostgreSQL에서 열의 일부를 그룹화하는 방법은 무엇입니까?

  13. 13

    기존 하위 문서를 MongoDB의 임베디드 배열로 푸시하는 방법은 무엇입니까?

  14. 14

    MongoDB의 배열에 포함 된 단일 문서를 쿼리하는 방법은 무엇입니까?

  15. 15

    열 이름의 일부를 그룹화하고 평균을 집계하는 방법은 무엇입니까?

  16. 16

    폼의 체크 박스를 Node에서 배열로 그룹화하는 방법은 무엇입니까?

  17. 17

    각 numpy 열의 0이 아닌 모든 요소를 크기가 열 수와 동일한 배열의 값에 할당하는 방법은 무엇입니까?

  18. 18

    배열의 특정 위치에서 요소를 삭제하는 방법은 무엇입니까?

  19. 19

    배열에서 요소의 위치를 변경하는 방법은 무엇입니까?

  20. 20

    MongoDB 배열 쿼리는 배열의 대부분의 요소와 일치하는 문서를 반환합니다.

  21. 21

    브러시의 범위를 부모 요소의 크기와 일치시키는 방법은 무엇입니까?

  22. 22

    배열의 임의 위치에 요소를 효율적으로 삽입하는 방법은 무엇입니까?

  23. 23

    Javascript 초기 배열의 새 요소를 동일한 인덱스의 배열 배열 내부의 각 배열로 푸시하는 방법은 무엇입니까?

  24. 24

    배열에서 임의의 요소를 얻는 방법은 무엇입니까?

  25. 25

    배열의 각 요소를 비교하고 동일한 데이터 (제 경우 날짜)를 가진 요소를 그룹화하는 방법은 무엇입니까? 자바 스크립트

  26. 26

    Javascript의 고유 속성으로 배열의 개체를 그룹화하는 방법은 무엇입니까?

  27. 27

    순열에 따라 시퀀스의 구성 요소를 재배 열하는 방법은 무엇입니까?

  28. 28

    Where 절에서 문자열 배열의 요소를 검색하는 방법은 무엇입니까?

  29. 29

    mongodb에서 배열 요소 간의 상관 관계를 유지하는 방법은 무엇입니까?

뜨겁다태그

보관