2017-12-30 13 views
0

각 십분 후에 함수를 실행하여 MongoDB :내가 아래 MongoDB를에서 문서를

{ 
    id:1, 
    requestType: { 
     "api1": { 
      count:1, 
      firstAttemptTime: 1514360898751.0 
     }, 
     "api2": { 
      count:4, 
      firstAttemptTime: 1514366897751.0 
     } 
    } 
} 

내가 firstAttemptTime 키에 따라 requestType에서 개체를 제거하기 위해 10 분마다라는 몽구스의 함수를 작성하려면 . 예를 들어 10 분 후에 문서는 다음과 같아야합니다.

{ 
    id:1, 
    requestType: { 
     "api2": { 
      count:4, 
      firstAttemptTime: 1514366897751.0 
     } 
    } 
} 

답변

1

타임 스탬프를 기준으로 데이터를 제거하려는 것 같습니다. 레코드를 위해 TTL을 설정함으로써 MongoDB에서이를 수행 할 수 있으며 주기적으로 함수를 실행할 필요가 없습니다. 당신은 단지 TTL 인덱스를 생성하고 몇 초 후에 문서가 삭제되어야 하는지를 지정합니다. 이 같은이 https://docs.mongodb.com/manual/tutorial/expire-data/

+0

더 신뢰할 수있을 것 같아요에 대한 튜토리얼이있다. 난 그냥 개체의 가치를 제거하고 싶습니다. – Sepehr

+0

예제에서 id 필드는 api1 및 api2 문서 내에있을 수 있으며이 TTL 만료를 사용할 수 있음을 알 수 있습니다. 아마도 제공된 예제는 사용중인 전체 문서가 아니지만 MongoDB에서 장기 실행 기능이 아닌 TTL 만료를 사용할 수 있도록 문서와 스키마를 만들어야한다고 생각합니다. –

1

뭔가

var mongoose = require('mongoose') 
var db = mongoose.createConnection('mongodb://localhost:port/db') 
var newSchema = new mongoose.Schema({ 
    id: Number, 
    requestType: { type: {} }, 
    requestTypeList: { type: [] }, 
}) 
var model = db.model('newModel', newSchema) 

setTimeout(function(){ 
    model.find({id: 1}, function(err, doc){ 
     // remove requestType properties first keyed value 
     delete Object.keys(doc.requestType)[0] 

     // or 

     // remove requestType property's first value as an Array 
     delete doc.requestTypeList[0] // I'd recomend because otherwise you'll be left with ever increasing key values like api90000000+ as the first key 

     doc.save(function(err){ 
      if(!err){ 
       console.log('success :)') 
      } else { 
       console.log('oh oh') 
      } 
     }) 

    }) 
}, 600000) // 600000ms == 10 minutes 

// es 5 or 6 idk.. 

setTimeout(()=>{ 
    model.find({id: 1}, (err, doc)=>{ 
     // remove requestType properties first keyed value 
     delete Object.keys(doc.requestType)[0] 

     // or 

     // remove requestType property's first value as an Array 
     delete doc.requestTypeList[0] // I'd recomend because otherwise you'll be left with ever increasing key values like api90000000+ as the first key 

     doc.save((err)=>{ 
      if(!err){ 
       console.log('success :)') 
      } else { 
       console.log('oh oh') 
      } 
     }) 

    }) 
}, 600000) // 600000ms == 10 minutes 

를 작동합니다하지만 어쩌면 Priidik에 의한 TTL의 대답은 내가 문서를 삭제하지 않으

관련 문제