`MongoDB findOne` 예제

MongoDB findOne() 메소드는 입력한 조건을 만족하는 단 하나의 문서만을 반환합니다. 입력한 조건이 여러 문서와 일치하는 경우, 이 메소드는 데이터베이스에 저장된 문서의 순서를 반영하여 단 하나의 문서만을 반환합니다.

MongoDB findOne

MongoDB findOne() 구문은 다음과 같습니다: db.collection.findOne(<조건>, <프로젝션>) 조건 – 입력한 선택 조건을 지정합니다. 프로젝션 – 반환된 문서에 표시할 필드 목록을 지정합니다. MongoDB findOne에 대한 몇 가지 중요한 사항:

  1. 프로젝션 매개변수는 1 또는 true, 0 또는 false의 부울 값을 허용합니다. 프로젝션 필드가 지정되지 않은 경우, 모든 필드가 검색됩니다.
  2. MongoDB findOne()은 _id 필드를 항상 포함하며, 프로젝션 매개변수에서 명시적으로 제외하지 않는 한 포함됩니다.
  3. MongoDB findOne()은 커서가 아닌 단일 문서만을 반환합니다.

MongoDB findOne – 쿼리 사양이 비어 있음

이 작업은 지정한 컬렉션에서 단일 문서를 반환합니다. 예를 들어, db.car.findOne() 출력:

{
"_id" : 2,
"name" : "Polo", "color" : "White",
"cno" : "H411", "speed" : 45, "mfdcountry" : "Japan"
}

car 컬렉션에서 하나의 레코드만 검색됩니다. “Polo”가 먼저 데이터베이스에 삽입되었음에 유의하십시오.

MongoDB findOne – 쿼리 사양

이 MongoDB findOne 작업은 지정한 컬렉션에서 첫 번째로 일치하는 문서를 선택 기준과 함께 반환합니다. 예를 들어:

>db.car.findOne(
... {
... $or:[
... {name:"Zen"},
... {speed: {$gt:60}} ... ]
... }
... )

{
"_id" : ObjectId("546cb92393f464ed49d620db"), 
"name" : "Zen",
"color" : "JetRed",
"cno" : "H671",
"speed" : 67, 
"mfdcountry" : "Rome"
}

이 작업은 “Zen”이라는 이름의 차 또는 속도가 60보다 큰 차를 검색하고, 해당 기준을 만족하는 첫 번째 문서를 차 컬렉션에서 검색합니다.

MongoDB findOne()에서의 프로젝션

프로젝션 매개변수는 MongoDB findOne 메서드에도 적용됩니다. findOne에서 프로젝션을 사용할 수 있는 몇 가지 시나리오를 살펴보겠습니다.

MongoDB findOne – 반환할 필드 지정

이 작업은 쿼리에서 지정된 필드만 표시합니다. 예를 들어:

>db.car.findOne(
... { },
... {name:1,color:1}
... )

{ "_id" : 2, "name" : "Polo", "color" : "White" }

id, name 및 color 필드가 있는 Car 컬렉션의 첫 번째 문서가 표시됩니다.

MongoDB findOne – 제외할 필드를 제외하고 모든 필드 반환

이 작업은 선택 기준에 지정된 필드를 제외하고 첫 번째 문서를 검색합니다. 예를 들어;

>db.car.findOne(
... { name:"Volkswagen" },
... {_id:0, mfdcountry:0,cno:0 }
... )

{ "name" : "Volkswagen", "color" : "JetBlue", "speed" : 62 }

Volkswagen이라는 자동차 이름은 id, mfdcountry 및 cno 필드를 제외하고 검색됩니다.

MongoDB findOne 결과 문서

이 작업에서는 커서 메서드가 작동하지 않습니다. 이 메서드는 단일 문서만 반환하기 때문입니다. 문서에서 개별 필드 값을 인쇄하려면 다음 코드를 사용할 수 있습니다.

>var car = db.car.findOne(); 
> if (car) {
...  var carName = car.name;
...  print (tojson(carName));
... }

"Polo"

이는 “Polo”라는 자동차의 이름만 검색합니다.

MongoDB findOne Java 예제

아래는 MongoDB findOne() 메서드와 함께 사용할 수 있는 다양한 옵션을 보여주는 Java 프로그램입니다. MongoDBFindOne.java

package com.journaldev.mongodb;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

import java.net.UnknownHostException;

public class MongoDBFindOne {

	// 어떤 기준 없이 첫 번째 문서를 가져오는 메서드
	public static void emptyFindOne() throws UnknownHostException {

		// 실행 중인 데이터베이스에 대한 새로운 연결을 가져옵니다
		MongoClient mongoClient = new MongoClient("localhost");

		// test를 데이터베이스로 사용하고, 여기에는 자신의 데이터베이스를 사용하세요
		DB db = mongoClient.getDB("test");

		// 컬렉션 객체를 가져옵니다. 여기에서는 car를 사용했으며, 자신의 컬렉션을 사용하세요
		DBCollection coll = db.getCollection("car");

		// findOne() 메서드를 호출합니다
		DBObject doc = coll.findOne();

		// 결과 문서를 출력합니다
		System.out.println(doc);
	}

	// 선택 기준에 따라 문서를 가져오는 메서드
	public static void querySpecification() throws UnknownHostException {
		// 매번 연결을 가져올 필요는 없습니다(한 번만 수행 가능)
		// globally).
		MongoClient mongoClient = new MongoClient("localhost");
		DB db = mongoClient.getDB("test");
		DBCollection coll = db.getCollection("car");

		// 이름과 속도 값에 따라 문서를 필터링하는 쿼리
		// 새로운 객체를 생성하여 결과 문서를 가져옵니다
		DBObject query = new BasicDBObject("name", "Zen").append("speed",
				new BasicDBObject("$gt", 30));

		// 기준을 만족하는 결과 문서를 출력합니다
		DBObject d1 = coll.findOne(query);

		// 문서를 콘솔에 출력합니다
		System.out.println(d1);
	}

	public static void projectionFields() throws UnknownHostException {

		MongoClient mongoClient = new MongoClient("localhost");
		DB db = mongoClient.getDB("test");
		DBCollection coll = db.getCollection("car");

		// 새로운 db 객체를 생성합니다
		BasicDBObject b1 = new BasicDBObject();

		// 결과에 이름과 색상 필드만 표시하는 기준
		// document
		BasicDBObject fields = new BasicDBObject("name", 1).append("color", 1);

		// 필드와 객체를 받아 문서를 가져오는 메서드
		// criteria
		DBObject d1 = coll.findOne(b1, fields);

		System.out.println(d1);

	}

	public static void excludeByfields() throws UnknownHostException {
		MongoClient m1 = new MongoClient("localhost");

		DB db = m1.getDB("test");
		DBCollection col = db.getCollection("car");

		// car 이름이 volkswagen인 필터 기준
		DBObject query = new BasicDBObject("name", "Volkswagen");

		// mfdcountry, cno 및 id 필드를 제외한 필드
		BasicDBObject fields = new BasicDBObject("mfdcountry", 0).append("cno",
				0).append("_id", 0);

		DBObject d1 = col.findOne(query, fields);
		System.out.println(d1);
	}

	public static void printDoc() throws UnknownHostException {
		MongoClient m1 = new MongoClient("localhost");
		DB db = m1.getDB("test");
		DBCollection col = db.getCollection("car");
		
		DBObject d1 = col.findOne();
		
		// 차 이름만 출력합니다
		System.out.println((d1.get("name")));
	}
	
	public static void main(String[] args) throws UnknownHostException {
		// main에서 모든 메서드를 호출합니다
		emptyFindOne();
		querySpecification();
		projectionFields();
		excludeByfields();
		printDoc();
	}

}

위 프로그램의 출력은 다음과 같습니다:

{ "_id" : 2.0 , "name" : "Polo" , "color" : "White" , "cno" : "H411" , "speed" : 45.0 , "mfdcountry" : "Japan"} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
{ "_id" : { "$oid" : "546cb92393f464ed49d620db"} , "name" : "Zen" , "color" : "JetRed" , "cno" : "H671" , "speed" : 67 , "mfdcountry" : "Rome"}
{ "_id" : 2.0 , "name" : "Polo" , "color" : "White"}
{ "name" : "Volkswagen" , "color" : "JetBlue" , "speed" : 62}
Polo

findOne() 메소드에 대한 설명은 여기까지입니다. 다음 포스트에서 더 많은 MongoDB 옵션을 살펴볼 예정입니다. 참고: 공식 문서

Source:
https://www.digitalocean.com/community/tutorials/mongodb-findone-example