2016-11-04 7 views
0

는 제가 아래로 출력하고자mongodb에서 프로젝트를 사용하지 않고 집계를 사용하여 최상위 수준에서 하위 문서 필드를 가져 오는 방법은 무엇입니까?

{'key1': 'value1', 
'key2': 'value2', 
'payload': { 'pkey1':'pvalue1', 
       'pkey2':'pvalue2', 
      }  
} 
{'key1': 'value1', 
'key2': 'value2', 
'payload': { 'pkey1':'pvalue1', 
       'pkey2':'pvalue2', 
       'pkey3':'pvalue3', 

      }  
} 

아래와 같이 fields.Sample 두 몽고 문서의 가변 수를 갖는 하나의 서브 문서 페이로드를 갖는 MongoDB의 컬렉션을`

{'key1': 'value1', 
'key2': 'value2', 
'pkey1':'pvalue1', 
'pkey2':'pvalue2'  
} 
{'key1': 'value1', 
'key2': 'value2', 
'pkey1':'pvalue1', 
'pkey2':'pvalue2', 
'pkey3':'pvalue3' 
} 

내가 프로젝트를 사용하고 싶지 않은 이유는 얼마나 많은 필드가 페이로드 서브 문서에 존재하는지 모르겠다. 나는 다른 콜렉션에 집계 결과를 저장하려고한다. 그러나 나는 각각을 사용하려고 생각하고 있었다. 데이터가 너무 커서 작업을 완료하는 데 많은 시간이 걸릴 것입니다. 제발 조언.

답변

1

현재 집계에서 그렇게 할 방법이 없으므로 미리 필드를 알아야합니다. 그러나이 기능은 다음 릴리스에서 소개 될 수 있습니다.

db.test.find().forEach(function(doc) { 
    var new_doc = {}; 
    for (var key in doc) { 

     if (key != 'payload'){ 
      new_doc[key] = doc[key] 
     } 
     else{ 
       for (var key in doc.payload) { 
        new_doc[key] = doc.payload[key] 
       }; 
     } 
    }; 
    db.test2.save(
     new_doc 
    ); 
}); 
:

당신은 각각의 작업을 수행하고, 새 컬렉션으로, 새로운 문서로 바꿀 필요