2013-08-05 3 views
4

자바 스크립트 해시를 반복하고 콜렉션을 통해 집계를 호출하는 특정 작업을 수행하는 자바 스크립트 루프가 있습니다.

$ match 함수에 대한 집계 쿼리에 변수를 삽입 할 수 있었지만 $ project 함수는 사용할 수 없습니다.

해시 키를 통해 일치시킨 다음 방금 일치시킨 문서의 값과 함께 해시 값을 표시하려고합니다. 이러한 해시 값과 레이블은 미리 문서에 없습니다.

var cmtss = {}; 

for (var item in cursor['result']) 
{ 
    var prov = cursor['result'][item]['prov_group']; 
    cmtss[cursor['result'][item]['name']] = prov; 
} 

for (var item in cmtss) 
{ 
    var cmts = "$" + cmtss[item]; 

    result = db.modems.aggregate({ $match : { cmts: item } } , 
            { $project : { 
             ip : "$ip", 
             model : "$model", 
             cmts : "$cmts", 
             prov_group : cmts } }); 
    printjson(result); 
} 

보시다시피 제공되는 키와 일치하도록 $ 일치를 입력하겠습니다. 하지만 그 경기에서 필자는 추가 한 새로운 필드를 포함하여 3 개의 필드를 표시하려고하지만 그 값은 cmtss의 해시 값입니다. 값 앞에 $ 연산자를 사용하거나 사용하지 않고 시도했습니다. 결과 문서에 단순히 prov_group을 전혀 표시하지 않습니다.

어떻게 든 $ add를 사용해야합니까?

답변

1

나는 그것을 알아 냈다. ...

{ $project : { 
      ip : "$ip", 
      model : "$model", 
      cmts : "$cmts", 
      prov_group : { '$substr': [$prov, 0, 5] } } }); 
관련 문제