네, 가능합니다. MongoDB에서는 NumberLong() 데이터 타입을 사용하면 Long 타입의 _id 값으로 findOne() 메서드를 손쉽게 활용할 수 있습니다.
1. 샘플 컬렉션 생성
먼저 NumberLong() 타입의 _id를 가진 문서들을 포함하는 컬렉션을 생성해 보겠습니다.
> db.demo618.insertOne({_id:NumberLong("6336366454"),Name:"Chris"});
{ "acknowledged" : true, "insertedId" : NumberLong("6336366454") }
> db.demo618.insertOne({_id:NumberLong("6336366455"),Name:"David"});
{ "acknowledged" : true, "insertedId" : NumberLong("6336366455") }
> db.demo618.insertOne({_id:NumberLong("6336366456"),Name:"Bob"});
{ "acknowledged" : true, "insertedId" : NumberLong("6336366456") }2. 저장된 문서 확인하기
find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회합니다.
> db.demo618.find();
위 쿼리를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
{ "_id" : NumberLong("6336366454"), "Name" : "Chris" }
{ "_id" : NumberLong("6336366455"), "Name" : "David" }
{ "_id" : NumberLong("6336366456"), "Name" : "Bob" }3. Long 타입 _id로 findOne() 실행하기
이제 Long 타입의 _id 값을 조건으로 사용하는 findOne() 쿼리를 살펴보겠습니다. 조회할 때도 반드시 동일하게 NumberLong()으로 값을 감싸주어야 정확히 일치하는 문서를 찾을 수 있습니다.
> db.demo618.findOne({_id: NumberLong("6336366454")});쿼리 실행 결과는 다음과 같습니다.
{ "_id" : NumberLong("6336366454"), "Name" : "Chris" }정리
MongoDB에서 Long 타입의 _id로 문서를 조회할 때 핵심은 저장 시와 조회 시 모두 NumberLong()을 사용해야 한다는 점입니다. 일반 숫자 리터럴로 비교하면 데이터 타입이 달라 문서를 찾지 못할 수 있으므로 주의해야 합니다.