2016-11-05 3 views
0

는 다음과 같은 속성을 가진 스키마를 고려몽구스 투영법에서 다른 계산 된 필드를 사용하여 계산 된 필드를 만드는 방법은 무엇입니까?

{ 
    maxDmg: Number, 
    attacks: Number 
} 

내가 다른 계산 된 필드의 결과를 포함하는 계산 필드를 만들 필요가 무엇인가 : 그것은 계산 열처럼 보이는

$project { 
    maxDmg: true, 
    attacks: true, 
    effDmg: { $multiply: ["$maxDmg", 0.70] }, 
    dps: { $divide: [ {$multiply:["$effDmg","$attacks"]}, 60 ] } 
} 

그러나 'effDmg'는 다른 계산 열에서 참조 될 수 없습니다. 해결 방법이 있습니까?

답변

1

기존의 계산 된 변수에 액세스 할 수 있다고 생각하지 않지만 let 연산자를 사용하여 동일한 계산 된 변수를 만들고 다른 계산 된 변수에서 사용할 수 있습니다. 희망이 도움이됩니다.

$project: { 
    maxDmg: true, 
    attacks: true, 
    effDmg: { 
     $multiply: ["$maxDmg", 0.70] 
    }, 
    dps: { 
     $let: { 
      vars: { 
       effDmg: { 
        $multiply: ["$maxDmg", 0.70] 
       } 
      }, 
      in: { 
       $divide: [{ 
        $multiply: ["$$effDmg", "$attacks"] 
       }, 60] 
      } 
     } 
    } 
} 

업데이트는 :

당신은 하나 개의 프로젝트 내부의 계산을 유지할 수 있습니다 나중에 당신은 그들을 투사 할 수 있습니다. 이렇게하면 변수를 재사용하면됩니다.

$project: { 
    maxDmg: true, 
    attacks: true, 
    together: { 
     $let: { 
      vars: { 
       effDmg: { 
        $multiply: ["$maxDmg", 0.70] 
       } 
      }, 
      in: { 
       dps: { 
        $divide: [{ 
         $multiply: ["$$effDmg", "$attacks"] 
        }, 60] 
       }, 
       effDmg: "$$effDmg" 
      } 
     } 
    } 
} 

샘플 출력 :

{ 
    "maxDmg": 34, 
    "attacks": 45, 
    "together": { 
     "dps": 17.849999999999998, 
     "effDmg": 23.799999999999997 
    } 
} 
+0

흠 .... 계산이 실제로 예제에서 사용한 것보다 훨씬 복잡하기 때문에 내가 원하는 바가 아니므로 코드 중복을 피하려고합니다. 그래도 새로운 것을 배웠습니다. 감사합니다! – amnesia

+0

업데이트 됨. 도움이되는지 확인하십시오. 다른 프로젝트를 추가하여 값을 추출 할 수 있습니다. – Veeram

+0

오, 그래, 좋은 지적; 나는 종종 명백한 것을 간과한다. 고마워. 고마워. – amnesia

관련 문제