2014-12-19 2 views
-1

MongoDB 그룹 쿼리가 있습니다. 나는 그것의 대부분을 무시하지만 'reduce'함수의 'if'조건 비트가 나를 혼란스럽게합니다. 나는 그 목적이 무엇인지 잘 모릅니다.이 MongoDB 쿼리 디코드

db.users.group({ 
    "initial": { 
     "countstar": 0 
    }, 
    "reduce": function(obj, prev) { 
     if (true != null) if (true instanceof Array) prev.countstar += true.length; 
     else prev.countstar++; 
    }, 
    "cond": { 
     "location": null 
    } 
}); 

'초기'매개 변수의 역할을 알고 있습니다. 나는 또한 'cond'매개 변수가 무엇을하는지 알고 있습니다. 그러나 'reduce'매개 변수의 전체 비트가 혼란 스럽습니다.

또한 동등한 SQL은 무엇입니까?

db.users.group({ 
    "initial": { "countstar": 0 }, 
    "reduce": function(obj, prev) { 
     if (true != null) { 
      if (true instanceof Array) 
       prev.countstar += true.length; 
      else 
       prev.countstar++; 
     } 
    }, 
    "cond": { "location": null } 
}); 

뭔가이와 확실히 잘못 true 자바 스크립트에서 부울 값이기 때문에 첫 번째 조건은 항상 보유하고 있으므로, 두 번째 조건은 유지 결코 및 true.length :

+0

나는 어딘가에 true라는 변수가 있고 그 코드를 처리하는 방법에 대한 코드가 있는지를 추측합니다. – alernerdev

+0

@alernerdev 좋아요, 두 조건이 연속 일 경우 어떻게됩니까? 그들은 중첩되어 있습니까? –

+0

예, 중첩되었습니다. 그 핵심은 다음과 같습니다. null이 아닌지 확인하십시오. 그렇지 않은 경우 배열인지 확인하십시오. 배열 인 경우 배열의 길이를 더하십시오. 배열이 아닌 경우 하나씩 증가합니다. 들여 쓰기를 사용하여 여러 줄로 분리하고 좋은 교정을 위해 중괄호를 넣어 읽기 쉽게 만들 수 있습니다. 이 코드를 가져 와서 "true"의 다른 값을 설정하고 어떤 일이 발생하는지 관찰 할 수 있습니다. – alernerdev

답변

0

우리가 다시 포맷하는 경우는 이해하기 쉽게 undefined입니다. true 대신 obj의 일부 속성으로 표시되어야합니다. 이 경우 코드가 수행하는 작업은 일종의 배열 속성 인 true이 참조 할 것으로 예상되는 길이를 합계하여 비 배열 값을 길이 1 배열로 계산합니다. 이 코드는 어디에서 왔습니까? 실제로 작동하고 의미있는 결과를 줍니까? 이 코드에서 얻고 자하는 결과는 무엇입니까? 나는 당신이 함수를 버려야한다고 생각합니다. 집계를 사용하여 동일한 작업을 수행 할 수 있으며 더 잘 작동합니다. 이 코드를 사용해서는 안되며 SQL을 능숙하게 사용할 수 없기 때문에 SQL로 변환하려고하지 않을 것입니다.