누구나 30 초보다 오래된 문서에 대한 컬렉션에 대한 쿼리에 대한 좋은 접근 방법을 가지고 있습니다. 30 초 이상 특정 상태에있는 항목을 실패로 표시하는 정리 작업자를 만듭니다.30 초보다 오래된 문서에 대한 MongoDB 쿼리
중요한 것은 아니지만이 경우에는 mongojs을 사용하고 있습니다.
모든 문서에는 created
시간이 있습니다.
누구나 30 초보다 오래된 문서에 대한 컬렉션에 대한 쿼리에 대한 좋은 접근 방법을 가지고 있습니다. 30 초 이상 특정 상태에있는 항목을 실패로 표시하는 정리 작업자를 만듭니다.30 초보다 오래된 문서에 대한 MongoDB 쿼리
중요한 것은 아니지만이 경우에는 mongojs을 사용하고 있습니다.
모든 문서에는 created
시간이 있습니다.
을 우리는 당신이 그것을 삽입하거나 그렇지 않으면 당신에게 중요한에 따라 수정 된 시간이 문서에 created_at
또는 유사한 필드가 가정합니다.
multi
옵션을 update에 입력하여 쿼리와 일치하는 모든 문서에 변경 내용을 적용 할 수 있습니다. 당신이 꽤 많이 드라이버의 동일해야하는 쉘 구문에서
매우 간단합니다 과거를보고 원하는 시간을 설정 : 첫 번째 false
어떤 이해가되지 않습니다 upserts하기위한 것이며
db.collection.update({
created_at: {$lt: time },
state: oldstate
},
{$set: { state: newstate } }, false, true)
이 용도에서는 multi
문서 업데이트 용으로 표시됩니다.
문서가 실제로 수명이 짧고 이후에 다른 문서가 필요하지 않은 경우 capped collections을 고려해 볼 수 있습니다. 이러한 경우에 total size
또는 time to live
옵션을 사용할 수 있으며 자연어 삽입 순서는 대기중인 항목 처리를 선호합니다.
당신은 그런 일 사용할 수 있습니다
var d = new Date();
d.setSeconds(d.getSeconds() - 30);
db.mycollection.find({ created_at: { $lt: d } }).forEach(function(err, doc) {});
이 사용 몽고 쉘 수행 할 경우
db.requests.find({created: {$lt: new Date((new Date())-1000*60*60*72)}}).count()
... 나이가 72 시간 인 문서를 찾을 수를 ("지금"마이너스 "72 * 60 * 60 * 1000"밀리 초) . 30 초는 1000 * 30이됩니다.
TTL 옵션은 또한 우아한 솔루션입니다. 그것은 x 초 후 자동으로 문서를 삭제 인덱스의 여기를 참조 : https://docs.mongodb.org/manual/core/index-ttl/
예제 코드는 다음과 같습니다
db.yourCollection.createIndex({ created:1 }, { expireAfterSeconds: 30 })
내가 함께 사용할 수있는 권리 형식으로 날짜 개체를 얻을하는 방법을 잘했다 쿼리. 이것은 훌륭하게 작동했습니다. 감사! –