programing

MongoDB에서 각 문서의 마지막 업데이트 시간을 검색하는 방법은 무엇입니까?

topblog 2023. 6. 27. 21:35
반응형

MongoDB에서 각 문서의 마지막 업데이트 시간을 검색하는 방법은 무엇입니까?

MongoDB의 컬렉션에서 데이터(즉, 문서)의 마지막 업데이트/수정 시간을 얻을 수 있는 방법이 있는지 알고 싶습니다.더 명확하게, 특정 시간 이후에 업데이트된 모든 문서를 검색하기 위해 쿼리를 만들고 싶습니다.

MongoDB에서 마지막으로 수정된 타임스탬프를 검색할 수 있는 방법이 있습니까?

참고: 새로 생성된 문서의 경우 objectId에서 타임스탬프를 검색할 수 있지만, 업데이트의 경우 id는 동일합니다.MongoDB는 각 문서의 마지막 업데이트 시간을 어디에나 저장합니까?

제가 자바 드라이버로 morphia를 사용하고 있는데, morphia에서 가능한 방법이 있다면 알려주세요.

마지막 업데이트 시간을 직접 캡처해야 합니다.

응용 프로그램의 경우 AuditTrail 개체를 유지하며, AuditEvents를 캡처합니다.이러한 이벤트는 개체를 삽입, 업데이트 또는 삭제할 때 발생합니다(삭제는 내 시스템에서 가상이며 플래그만 설정함).

각 AuditEvent에 대해, 저는 날짜, 인증된 사용자, dbaction 및 응용프로그램이 작성한 설명을 추적합니다.이는 PersistentObject에서 구현되므로 Mongo에 저장된 모든 개체의 데이터베이스 작업이 자동으로 호출됩니다.

실제 구현에 걸리는 시간은 매우 짧지만, 마지막 업데이트 시간을 얻을 수 있는 기능과 Mongo의 모든 것에 대한 보안 및 고객 지원에 필요할 수 있는 기타 정보를 모두 제공합니다.

아니요, MongoDB 자체는 생성 타임스탬프 또는 업데이트 타임스탬프를 저장하지 않습니다.사용자가 직접 수행해야 합니다(그리고 이미 알고 있듯이 개체를 사용하는 경우).ID _id를 입력하면 생성 날짜가 이미 표시됩니다.

@user1530669가 언급한 대로 감사 추적 엔티티를 사용할 수 있습니다(나는 내 델타에 전화하고 있습니다. 코드는 이미 StackOverflow의 어딘가에서 사용할 수 있습니다).

또는 마지막 변경 시간을 저장할 수 있습니다.일반적으로 기본 엔티티를 사용하여 설정하고 다른 모든 엔티티는 확장합니다(특정 요구 사항에 대해 제거할 수 있음).creationDate처럼lastChange충분합니다):

protected Date creationDate;
protected Date lastChange;

// Getters and setters or final setters which don't do anything,
// if you only want to allow the entity to update the values

@PrePersist
public void prePersist() {
    creationDate = (creationDate == null) ? new Date() : creationDate;
    lastChange = (lastChange == null) ? creationDate : new Date();
}

그리고 쿼리에서 필터를 추가하여 다음을 수행할 수 있습니다.lastChange속성이 검색 제한보다 최신입니다.

다음을 수행할 수 있습니다.MongoDB 버전 4.2+에서는 이제 다음과 같은 집계 연산자를 수행할 수 있습니다.$toDateObjectId "_id"에서 타임스탬프를 추출합니다. update동시에

쿼리를 합니다.$toDate하고 MongoDB의 ObjectId "_id"를 사용하여 합니다.{$replaceRoot: {newRoot: "$$ROOT"}}명시적으로 말하는 대신에$set

var collection = "person"

agg_query = [
    {
        "$addFields" : {
            "_last_updated" : {
                "$toDate" : "$_id"
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: "$$ROOT"
        } 
    }
]

db.getCollection(collection).updateMany({}, agg_query, {upsert: true})

언급URL : https://stackoverflow.com/questions/13968700/how-to-retrieve-last-update-time-of-each-document-in-mongodb

반응형