MongoDB에서 _id로 문서 검색하기
MongoDB에서 _id를 기준으로 문서를 검색하려면 반드시 ObjectId() 함수를 호출해야 합니다. _id 필드는 단순 문자열이 아니라 ObjectId 타입으로 저장되기 때문에, 검색 시에도 동일한 타입으로 변환해 주어야 정확한 결과를 얻을 수 있습니다.
먼저 기본 문법부터 살펴보겠습니다.
db.yourCollectionName.find({"_id":ObjectId("yourId")}).pretty();예제 컬렉션 생성
개념을 이해하기 위해 실제로 컬렉션을 만들고 문서를 삽입해 보겠습니다. 아래 쿼리는 searchDocumentDemo 컬렉션에 여러 개의 문서를 순차적으로 추가합니다.
> db.searchDocumentDemo.insertOne({"UserId":1,"UserName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8e4330fd0aa0d2fe487")
}
> db.searchDocumentDemo.insertOne({"UserId":2,"UserName":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8ea330fd0aa0d2fe488")
}
> db.searchDocumentDemo.insertOne({"UserId":3,"UserName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8f1330fd0aa0d2fe489")
}
> db.searchDocumentDemo.insertOne({"UserId":4,"UserName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a8fa330fd0aa0d2fe48a")
}
> db.searchDocumentDemo.insertOne({"UserId":5,"UserName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a901330fd0aa0d2fe48b")
}
> db.searchDocumentDemo.insertOne({"UserId":6,"UserName":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c97a911330fd0aa0d2fe48c")
}find() 메서드로 전체 문서 조회
삽입된 모든 문서를 확인하려면 find() 메서드와 함께 pretty()를 사용하면 됩니다. pretty()는 결과를 보기 쉽게 정렬된 형태로 출력해 줍니다.
> db.searchDocumentDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{
"_id" : ObjectId("5c97a8e4330fd0aa0d2fe487"),
"UserId" : 1,
"UserName" : "Larry"
}
{
"_id" : ObjectId("5c97a8ea330fd0aa0d2fe488"),
"UserId" : 2,
"UserName" : "Mike"
}
{
"_id" : ObjectId("5c97a8f1330fd0aa0d2fe489"),
"UserId" : 3,
"UserName" : "David"
}
{
"_id" : ObjectId("5c97a8fa330fd0aa0d2fe48a"),
"UserId" : 4,
"UserName" : "Chris"
}
{
"_id" : ObjectId("5c97a901330fd0aa0d2fe48b"),
"UserId" : 5,
"UserName" : "Robert"
}
{
"_id" : ObjectId("5c97a911330fd0aa0d2fe48c"),
"UserId" : 6,
"UserName" : "Sam"
}_id로 특정 문서 검색하기
이제 핵심인 _id 기반 검색입니다. 아래처럼 ObjectId()를 호출하여 원하는 문서의 _id 값을 감싸주면 해당 문서만 정확히 조회할 수 있습니다.
> db.searchDocumentDemo.find({"_id":ObjectId("5c97a901330fd0aa0d2fe48b")}).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c97a901330fd0aa0d2fe48b"),
"UserId" : 5,
"UserName" : "Robert"
}주의 사항
_id 값에 ObjectId()를 사용하지 않고 단순 문자열로 검색하면 일치하는 문서가 없어 빈 결과가 반환됩니다. 예를 들어 {"_id": "5c97a901330fd0aa0d2fe48b"}처럼 작성하면 타입이 달라 매칭되지 않으므로, 반드시 ObjectId()로 감싸야 한다는 점을 기억하세요.