2014-06-12 2 views
0

나는 MongoDB를 2.6.0 오전, 나는 다음과 같은 문서의 컬렉션이 있습니다 :MongoDB를 : 필드 변환 배열 요소는

{ "mid" : 1021, 
    "day" : 298, 
    "data":[ 
    {"ts" : 1,"kwh" : 0.017}, 
    {"ts" : 2,"kwh" : 0.018}, 
    {"ts" : 3,"kwh" : 0.019}, 
    ... ] } 

는이 같은 개별 필드에 배열 요소를 버리고 싶습니다 :

{ "mid" : 1021, 
    "day" : 298, 
    "ts1" : 0.017, 
    "ts2" : 0.018, 
    "ts3" : 0.019, 
    ... 
} 

가 집계 프레임 워크를 가능해야처럼이 보이는,하지만 난 정말 "TS"의 값을 기준으로 데이터 배열의 "kwh"요소 프로젝트를 다시하는 방법을 알아낼 수 없습니다.

아무도이를 수행하는 방법을 알고 계십니까?

도움 주셔서 감사합니다. 정말 맵리 듀스 작업의

+0

정말 하시겠습니까? 대부분의 쿼리는 데이터 배열 구조를 유지할 때 훨씬 쉽게 수행 할 수 있습니다. – Philipp

+0

아마도 여기서 분명하지 않을 수 있습니다. 실제로 배열 데이터에서 평균 또는 무언가를 원하십니까? –

답변

1

더 : 당신이 유연하게 통합 프레임 워크를 사용하여 "키"의 값을 지정할 수 없습니다

db.collection.mapReduce(
    function() { 

     var copy = this; 
     var tdata = copy.data; 
     delete copy.data; 

     tdata.forEach(function(data) { 
     var key = "ts" + data.ts; 
     copy[key] = data.kwh; 
     }); 

     var id = copy._id; 
     delete copy["_id"]; 

     emit(id, copy); 

    }, 
    function(){}, 
    { "out": { "inline": 1 } } 
) 

현재. 원하는 출력을 얻으려면 투영을 통해 각 키의 이름을 명시 적으로 지정해야합니다.

MapReduce는 작동 방식에 대해 원하는 출력을 "정확하게"제공하지 않습니다. 그러나 명시 적으로 키의 이름을 지정하지 않으면 얻을 수있는 가장 가까운 것입니다.