2017-12-13 5 views
0

MongoDb 3.4를 사용하고 있으며, 재 배열을 위해 약 400.000.000 개의 레코드가 있습니다. 행의 데이터 값을 테이블에Mongodb는 중첩 된 콜렉션에서 테이블을 만듭니다.

{ 
    "_id": ObjectId("5a29777dce2ac011041718e9"), 
    "elements": [{ 
      "IdSensore": "14348", 
      "Valore": -2.5, 
      "idOperatore": "1" 
     }, { 
      "IdSensore": "14351", 
      "Valore": 16, 
      "idOperatore": "1" 
     }, { 
      "IdSensore": "14355", 
      "Valore": 10, 
      "idOperatore": "1" 
     }, { 
      "IdSensore": "14355", 
      "Valore": 356, 
      "idOperatore": "3" 
     } 
    ], 
    "Data": "01/01/2013 00:10:00" 
} 

및 idOperatore을 이루어야 여러 필드 (일부 널 (null))에서 특정 IdSensore : 어떻게 내가 이런 식으로 문서를 변환 할 수 있습니다 하나? 이 지역 : 모든 행에, 내가 지정한 "IdSensore"에 대한 모든 "Valore"를 찾아 좋아하고 것 "1 idOperatore"즉

Data     IdSensore:14348 IdSensore:14351 IdSensore:14355 
01/01/2013 00:10:00   -2.5   16    10 

: 이 다른 컬렉션에 내보낼 원하는 결과입니다 견본.

+0

더 [참조 당신을 위해 작동하는 경우 대신 대답을 받아, 제목에 해결 추가하거나 노력하고 해결책을 통과하지 마십시오 투어] –

답변

0

당신은 같은 것을 할 필요가 : 당신이 배울 수

db.startCollection.find().forEach(
function(item){ 
    var data1 = item.Data; 
    var finishObject = {}; 
    finishObject["Data"] = data1; 
    item.elements.filter(function(item2){return item2.idOperatore==1}) 
    .forEach(
      function(item2){ 
        finishObject["IdSensore:"+item2.IdSensore] = item2.Valore; 
      } 
    ); 
    db.finishCollection2.insert(finishObject); 
}) 
+0

대단히 고맙습니다 만, 문제가있어 실행되지 않습니다. 나는 parentoresis를 쌍으로 만드는 yor 제안을 다시 작성했다. 그러나 계속해서 되돌아 간다. SyntaxError : missing; before 문 @ (셸) : 8 : 18. – Sandro

+0

죄송합니다. 내 코드를 편집했습니다. –

+0

좋아요! 고마워요. 솔루션은 239639 레코드 (12Gb RAM 및 SSD가있는 i7)에 대해 5 분이 소요됩니다. 다른 400.000.000 레코드로 시도하겠습니다. 아마도 대량 실행을 사용하게 될 것입니다. – Sandro

관련 문제