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

MongoDB에서 특정 날짜 사이에 로그인한 사용자 수 구하기 – $gte, $lt 연산자 활용법

사용자의 로그인 날짜를 저장해 두었다고 가정해 보겠습니다. 이제 특정 기간 사이에 로그인한 사용자, 즉 로그인 날짜가 지정된 범위에 속하는 사용자 수를 조회하고 싶은 상황이라면 어떻게 해야 할까요? 이럴 때 MongoDB에서는 $gte(크거나 같음)와 $lt(작음) 연산자를 count() 메서드와 함께 사용하면 간단하게 해결할 수 있습니다.

샘플 컬렉션 생성하기

먼저 문서를 담고 있는 컬렉션을 생성해 보겠습니다. 아래 예제에서는 사용자 이름(UserName)과 로그인 날짜(UserLoginDate)를 저장했습니다.

> db.findDataByDateDemo.insertOne({"UserName":"John","UserLoginDate":new ISODate("2019-01-31")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdd8cd7bf3115999ed511ed")
}
> db.findDataByDateDemo.insertOne({"UserName":"Larry","UserLoginDate":new ISODate("2019-02-01")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdd8ce7bf3115999ed511ee")
}
> db.findDataByDateDemo.insertOne({"UserName":"Sam","UserLoginDate":new ISODate("2019-05-02")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdd8cf3bf3115999ed511ef")
}
> db.findDataByDateDemo.insertOne({"UserName":"David","UserLoginDate":new ISODate("2019-05-16")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdd8d00bf3115999ed511f0")
}
> db.findDataByDateDemo.insertOne({"UserName":"Carol","UserLoginDate":new ISODate("2019-10-19")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdd8d0ebf3115999ed511f1")
}

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다. 쿼리는 다음과 같습니다.

> db.findDataByDateDemo.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5cdd8cd7bf3115999ed511ed"), "UserName" : "John", "UserLoginDate" : ISODate("2019-01-31T00:00:00Z") }
{ "_id" : ObjectId("5cdd8ce7bf3115999ed511ee"), "UserName" : "Larry", "UserLoginDate" : ISODate("2019-02-01T00:00:00Z") }
{ "_id" : ObjectId("5cdd8cf3bf3115999ed511ef"), "UserName" : "Sam", "UserLoginDate" : ISODate("2019-05-02T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d00bf3115999ed511f0"), "UserName" : "David", "UserLoginDate" : ISODate("2019-05-16T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d0ebf3115999ed511f1"), "UserName" : "Carol", "UserLoginDate" : ISODate("2019-10-19T00:00:00Z") }

특정 날짜 범위 내 로그인 사용자 수 조회하기

다음은 MongoDB에서 특정 날짜 사이에 로그인한 사용자 수를 구하는 쿼리입니다. 여기서는 2019년 5월 2일부터 2019년 5월 18일 미만까지의 기간을 기준으로 집계합니다.

> db.findDataByDateDemo.count({"UserLoginDate":{ "$gte": new Date("2019-05-02"), "$lt": new Date("2019-05-18") }});

실행 결과는 다음과 같습니다.

2

결과로 2가 반환되었습니다. 이는 해당 기간에 로그인한 사용자가 Sam(2019-05-02)과 David(2019-05-16) 두 명이기 때문입니다. 참고로 $gte는 시작 날짜를 포함하고, $lt는 종료 날짜를 포함하지 않으므로 날짜 범위를 지정할 때 이러한 경계 조건을 반드시 유의해야 합니다.