Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 타임스탬프를 현재 날짜로 업데이트하는 방법

MongoDB에서 타임스탬프를 현재 날짜로 업데이트하기

MongoDB에서 기존 문서의 날짜 필드를 수정하려면 update() 메서드를 사용하면 됩니다. 필드 값을 현재 날짜로 설정하려면 먼저 JavaScript의 new Date()를 통해 현재 시각을 가져와야 합니다.

var todayDate = new Date();

1단계: 컬렉션 생성 및 문서 삽입

먼저 샘플 문서가 포함된 컬렉션을 만들어 보겠습니다.

> db.demo644.insertOne({"ShippingDate":new ISODate("2018-04-19")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9c76896c954c74be91e6e6")
}
> db.demo644.insertOne({"ShippingDate":new ISODate("2019-01-10")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9c76966c954c74be91e6e7")
}

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.demo644.find();

위 명령은 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e9c76896c954c74be91e6e6"), "ShippingDate" : ISODate("2018-04-19T00:00:00Z") }
{ "_id" : ObjectId("5e9c76966c954c74be91e6e7"), "ShippingDate" : ISODate("2019-01-10T00:00:00Z") }

2단계: 타임스탬프 업데이트 쿼리 실행

이제 타임스탬프를 업데이트하는 쿼리입니다. 현재 날짜 객체를 생성한 후, 필요에 따라 1시간을 더하고, $set 연산자와 multi: true 옵션을 함께 지정하여 컬렉션 내 모든 문서를 한 번에 갱신합니다.

> var todayDate = new Date();
> todayDate.setHours(todayDate.getHours() + 1);
1587315898453
> db.demo644.update({}, {$set: {ShippingDate:todayDate}}, {multi: true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

실행 결과를 보면 2개의 문서가 모두 정상적으로 수정되었습니다(nModified: 2).

3단계: 업데이트 결과 확인

다시 find() 메서드로 전체 문서를 조회해 보겠습니다.

> db.demo644.find();

모든 문서의 ShippingDate 필드가 동일한 현재 시각으로 변경된 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e9c76896c954c74be91e6e6"), "ShippingDate" : ISODate("2020-04-19T17:04:58.453Z") }
{ "_id" : ObjectId("5e9c76966c954c74be91e6e7"), "ShippingDate" : ISODate("2020-04-19T17:04:58.453Z") }

참고: 최신 버전에서는 updateMany() 사용 권장

MongoDB 4.2 이상 버전에서는 update() 대신 updateMany() 사용이 권장됩니다. 위 예제는 다음과 같이 간결하게 바꿔 쓸 수 있습니다.

> db.demo644.updateMany({}, {$set: {ShippingDate: new Date()}});

updateMany()를 사용하면 별도의 multi 옵션 없이도 조건에 일치하는 모든 문서를 한 번에 업데이트할 수 있어 코드가 더 깔끔하고 안전합니다.