2016-07-22 5 views
1

MongoDB에 배열과 함께 첫 번째 수준의 데이터를 모두 포함하는 JSON 개체를 작성하려고합니다.몽구스는 JSON 배열에서 하위 문서를 만들지 않습니다.

대신 모든 첫 번째 수준의 데이터가 저장되지만 배열에 포함 된 모든 데이터는 저장되지 않습니다. 서버가받는 데이터를 로깅 할 때 전체 객체를 볼 수 있으므로 몽구스 코드에 문제가 있다는 것을 알게됩니다.

그래서 예를 들어 내가 이런 식으로 뭔가를 보내는 경우 :

issueId: "test1", 
issueTitle: "testtest", 
rows: [ 
    {order:1,data: [object]}, 
    {order:2,data: [object]}, 
] 

만 다음이 저장됩니다 :

issueId: "test1", 
issueTitle: "testtest", 
lastUpdated: Date, 

I가 몽고에 대해 다음 모델 :

//model.js 
var mongoose = require('mongoose'); 

var model = mongoose.Schema({ 

    issueId  : String, 
    issueTitle : String, 
    lastUpdated : {type: Date, default : Date.now}, 

    rows : [{ 
    order : Number, 
    data  : [ 
     { 
     title : String, 
     text : String, 
     link : String, 
     } 
    ] 
    }] 

}); 

module.exports = mongoose.model('Model', model); 

그리고 라우팅 코드는 문제가있을 것이라고 생각합니다.

또한 여기에 데이터를 저장하는 각도 컨트롤러 부분이 있습니다. 여기에 문제가 있다고 생각하지 않습니다. 몽구스 자주 묻는 질문의 첫 번째 질문에서

pushToServer = function() { 
    $http.post('/api/data/update',{ 
     dataToInsert : $scope.dataObject, 
    }).then(function successCallback(res){ 
     console.log("all good", JSON.stringify(res,null,3)); 
    }, function errorCallback(res){ 
     console.log("arg" + res); 
    }); 
    } 

답변

1

봐 : http://mongoosejs.com/docs/faq.html

몽구스가 배열 인덱스에 대한 게터/세터를 생성하지 않습니다; 그들 없이는 몽구스는 변화에 대한 통보를받지 못하기 때문에 새로운 가치를 지속 할 수 없다. 해결 방법은 몽구스> 3.2.0에서 사용 가능한 몽구스 배열을 사용하는 것입니다.

// query the document you want to update 
// set the individual indexes you want to update 
// save the document 
doc.array.set(3, 'changed'); 
doc.save(); 

편집 나는이 모든 행을 업데이트하는 작업을 거라고 생각해. 나는 그것이 효과가 있는지 알고 싶을 것이다.

let rowQueries = []; 
theData.rows.forEach(row => { 
    let query = Model.findOneAndUpdate({ 
     issueId: theData.issueId, 
     'row._id': row._id 
    }, { 
     $set: { 
      'row.$': row 
     } 
    }); 
    rowQueries.push(query.exec()); 
}); 

Promise.all(rowQueries).then(updatedDocs => { 
    // updated 
}); 
+0

Arg okay. 이것을 현재 Model API 메소드와 통합 할 수 있습니까? –

+0

이것은 큰 질문입니다. 하나의 업데이트에서 모든 기존 행을 업데이트하는 방법을 찾지 못했습니다. 각 행을 개별적으로 업데이트해야한다고 생각합니다. 나는 이것을하기위한 방법으로 대답을 업데이트 할 것이다. –

+0

신난다. 나는 그것을 시험해 보겠다. 몽구스가 이걸지지하지 않는다고 실망 스럽긴한데 ... –

관련 문제