2016-08-07 2 views
0

시계열 데이터 컬렉션이 있습니다. 이 같은Meteor Collection Update 하위 문서

:

{ _id: 'queBoS2mgjovC85uY', 
    sum_samples: 0, 
    type: 'Temperature', 
    timestamp_minute: "Sun Aug 07 2016 10:03:18 GMT-0400 (EDT)", 
    num_samples: 0, 
    Sensor:{ 
     '0': { value: 0, real: false }, 
     '1': { value: 0, real: false }, 
     '2': { value: 0, real: false }, 
     '3': { value: 0, real: false }, 
     '4': { value: 0, real: false }, 
     '5': { value: 0, real: false }, 
     '6': { value: 0, real: false }, 
     '7': { value: 0, real: false }, 
     '8': { value: 0, real: false }, 
     '9': { value: 0, real: false }, 
     '10': { value: 0, real: false }, 
     ... 
     '59': { value: 0, real: false } 

    } 
} 

'0', '1'객체는 시간의 분입니다. 이제 측정 된 값 중 하나를 Minute Value로 업데이트하고 "real"을 true로 설정하려고합니다. 실제 값은 이전 값이 실제 측정 된 센서 값이며 초기 값이 아님을 나타냅니다.

하지만 시도한 모든 Temperature.update()가 작동하지 않습니다. 취미 프로그래머이기 때문에 운석과 몽고 밥에 관한 나의 작은 지식 때문일 수도 있습니다. 항상 최신 항목을 업데이트하고 싶습니다. 누군가 나를 도울 수 있습니까? 어쩌면 내가 기본 뒤에 읽을 수있는 링크가 있습니다.

감사합니다. 마이클

첨부 :

내 코드는 순간에 prety 간단하다.

if (Meteor.isServer) { 
    Temperatures.insert({sum_samples: 0, type: "Temperatures"}); 
    var test = Temperatures.findOne({}, {sort: {timestamp_minute: -1}}); 

    Temperatures.update({_id: test._id},{$set: {"Sensor.32.value": 2032, "Sensor.32.real": true} }); 

} 

간단한 스키마는 그렇게했습니다.

Schemas = {}; 

Temperatures = new Meteor.Collection("Temperatures"); 

Schemas.seriesData = new SimpleSchema({ 
    timestamp_minute: { 
     type: Date, 
     defaultValue: new Date 
     }, 
    num_samples: { 
     type: Number, 
     defaultValue: 0 
    }, 
    sum_samples: { 
     type: Number, 
     defaultValue: 0 
    }, 
    type: { 
     type: String 
    }, 
    Sensor: { 
     type: Object, 
     blackbox: true, 
     optional: true, 
     autoValue: function(){ 
      if (this.operator === null && !this.isSet){ 
       var object = {}; 
       for(var i=0; i<=59;i++){ 
        object[i]={value: 0, real: false}; 
       } 
       return object; 
      } 
     } 

    } 
}); 
Temperatures.attachSchema(Schemas.seriesData); 
+0

먼저 코드를 공유하여 도와 드리겠습니다. –

+0

코드를 추가했습니다. 코드 만 테스트하기 때문에 지금은 꽤 간단합니다. 바라기를 이것은 당신을 돕는다. – Michael

답변

0

숫자를 작은 따옴표로 묶을 수 있습니까?

Temperatures.update({_id: test._id},{$set: {"Sensor.'32'.value": 2032, "Sensor.'32'.real": true} }); 

센서를 배열로 제안 하시겠습니까? 좋아요 :

+0

의견에 감사드립니다. 업데이트 코드를 사용할 때 업데이트가 예상대로 작동하지 않습니다. 나는이 새로운 필드 [code] '\ '32 \' '를 얻을 것이다 : {value : 2032, real : true} [/ code]는 배열이다. 접근하기 쉽니? 배열의 장점은 무엇입니까? 어떻게 할거 니? – Michael

+0

및 어떻게 업데이트 할 수 있습니까? Temperatures.update ({_ id : test._id}, {$ set : { "Sensor. [32] .value": 2032, "Sensor. [32] .real": true}}); 그것은 작동하지 않습니다. – Michael

+0

@Michael Syntax는''Sensor.32. '이 될 것입니다. 또한''백틱을 사용하여 monotype으로 주석 형식을 만들 수 있습니다. 그래서'some code \ '는'some code'가됩니다. (나는 그 백틱을 이스케이프 처리했습니다. \\'를 사용하여 코드가 표시되지 않도록하십시오.) –