Docs Menu
Docs Home
/
가이드 시작

쿼리를 사용하여 MongoDB에서 데이터 읽기

이전 가이드 인 MongoDB 에서 데이터 읽기 에서는 문서가 충족해야 하는 기준을 지정하지 않고 sample_guides.planets 컬렉션 에서 모든 문서를 조회했습니다.

이 가이드에서는 컬렉션을 쿼리하여 특정 동일성 기준에 일치하는, 즉 지정된 필드의 값이 일치하는 문서를 검색하는 방법을 설명합니다.

소요 시간: 15분

1

이 코드 블록에는 연결 URI를 사용자의 URI으로 바꿀 수 있는 주석이 있습니다. URI 문자열을 자체 Atlas 연결 문자열로 바꿉니다.

다음은 MongoDB에 접속하기 위해 필요한 최소한의 코드를 간략하게 정리한 것이다. 다음 몇몇 단계에서는 데이터를 읽기 위해 추가 작업을 수행합니다.

5번째 줄에서 URI 문자열을 자체 Atlas 연결 문자열로 대체합니다.

CrudRead.cs
1using MongoDB.Bson;
2using MongoDB.Driver;
3
4// Replace the uri string with your MongoDB deployment's connection string.
5var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7var client = new MongoClient(uri);
8
9// database and collection code goes here
10// find code goes here
11// iterate code goes here
12
13
14

다음은 MongoDB에 접속하기 위해 필요한 최소한의 코드를 간략하게 정리한 것이다. 다음 몇몇 단계에서는 데이터를 읽기 위해 추가 작업을 수행합니다.

11줄에서 URI string 을 자체 Atlas 연결 string 로 바꿉니다.

crudRead.go
1package main
2
3import (
4 "context"
5
6 "go.mongodb.org/mongo-driver/mongo"
7 "go.mongodb.org/mongo-driver/mongo/options"
8)
9
10func main() {
11 uri := "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
12
13 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
14 if err != nil {
15 panic(err)
16 }
17
18 defer func() {
19 if err = client.Disconnect(context.TODO()); err != nil {
20 panic(err)
21 }
22 }()
23
24 // database and colletion code goes here
25 // find code goes here
26 // iterate code goes here
27}

다음은 MongoDB에 접속하기 위해 필요한 최소한의 코드를 간략하게 정리한 것이다. 다음 몇몇 단계에서는 데이터를 읽기 위해 추가 작업을 수행합니다.

8줄에서 URI string 을 자체 Atlas 연결 string 로 바꿉니다.

CrudRead.java
1import com.mongodb.client.*;
2import com.mongodb.client.model.Filters.*;
3import org.bson.Document;
4import org.bson.conversions.Bson;
5
6public class CrudRead {
7 public static void main(String[] args) {
8 String uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
9
10 try (MongoClient mongoClient = MongoClients.create(uri)) {
11 // database and collection code goes here
12 // find code goes here
13 // iterate code goes here
14 }
15 }
16}

다음은 MongoDB에 접속하기 위해 필요한 최소한의 코드를 간략하게 정리한 것이다. 다음 몇몇 단계에서는 데이터를 읽기 위해 추가 작업을 수행합니다.

4번째 줄에서 URI 문자열을 자체 Atlas 연결 문자열로 대체합니다.

crud-read.js
1const { MongoClient } = require("mongodb");
2// Replace the uri string with your MongoDB deployment's connection string.
3const uri =
4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
5const client = new MongoClient(uri);
6async function run() {
7 try {
8 await client.connect();
9 // database and collection code goes here
10 // find code goes here
11 // iterate code goes here
12 } finally {
13 // Ensures that the client will close when you finish/error
14 await client.close();
15 }
16}
17run().catch(console.dir);

다음은 MongoDB에 접속하기 위해 필요한 최소한의 코드를 간략하게 정리한 것이다. 다음 몇몇 단계에서는 데이터를 읽기 위해 추가 작업을 수행합니다.

4번째 줄에서 URI 문자열을 자체 Atlas 연결 문자열로 대체합니다.

crud_read.py
1from pymongo import MongoClient
2
3# Replace the uri string with your MongoDB deployment's connection string.
4uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
5
6client = MongoClient(uri)
7
8# database and collection code goes here
9# find code goes here
10# iterate code goes here
11
12# Close the connection to MongoDB when you're done.
13client.close()

mongodb+srv

PyMongo를 srv 옵션으로 설치했는지 확인합니다.

python3 -m pip install "pymongo[srv]"
2

쿼리하려는 데이터베이스 및 컬렉션으로 전환합니다. 이 경우에는 sample_guides 데이터베이스와 planets 컬렉션을 사용합니다.

CrudRead.cs
// database and collection code goes here
var db = client.GetDatabase("sample_guides");
var coll = db.GetCollection<BsonDocument>("planets");
crudRead.go
1// database and colletion code goes here
2db := client.Database("sample_guides")
3coll := db.Collection("planets")
CrudRead.java
1// database and collection code goes here
2MongoDatabase db = mongoClient.getDatabase("sample_guides");
3MongoCollection<Document> coll = db.getCollection("planets");
crud-read.js
// database and collection code goes here
const db = client.db("sample_guides");
const coll = db.collection("planets");
crud_read.py
# database and collection code goes here
db = client.sample_guides
coll = db.planets
3

쿼리 필터를 적용하여 컬렉션에서 특정 문서를 조회할 수 있습니다. 쿼리 필터는 검색 중인 기준이 포함된 문서입니다. 다음 예시에서는 쿼리 필터를 사용하여 값이 truehasRings 필드가 있는 planets컬렉션의 문서를 조회하는 방법을 보여 줍니다.

CrudRead.cs
// find code goes here
var cursor = from planet in coll.AsQueryable()
where planet["hasRings"] == true
select planet;

BSON.D BSON.D 이(가) 주문되었으므로 MongoDB 로 문서를 보낼 때 사용해야 합니다. 이는 보다 복잡한 작업에서 중요합니다.

crudRead.go
1// find code goes here
2filter := bson.D{{"hasRings", true}}
3cursor, err := coll.Find(context.TODO(), filter)
4if err != nil {
5 panic(err)
6}

MongoDB Java 드라이버 에는 쿼리(및 기타 작업) 생성 프로세스 를 간소화하는 빌더 가 포함되어 있습니다. 여기서는 Filters.eq 빌더를 사용하여 쿼리 문서 를 구성합니다.

CrudRead.java
1// find code goes here
2Bson filter = eq("hasRings", true);
3MongoCursor<Document> cursor = coll.find(filter).iterator();
crud-read.js
// find code goes here
const cursor = coll.find({ hasRings: true });
crud_read.py
# find code goes here
cursor = coll.find({"hasRings": True})
4
CrudRead.cs
// iterate code goes here
foreach (var document in cursor.ToEnumerable())
{
Console.WriteLine(document);
}
crudRead.go
1// iterate code goes here
2for cursor.Next(context.TODO()) {
3 var result bson.M
4 if err := cursor.Decode(&result); err != nil {
5 panic(err)
6 }
7 fmt.Println(result)
8}
9if err := cursor.Err(); err != nil {
10 panic(err)
11}
CrudRead.java
1// iterate code goes here
2try {
3 while (cursor.hasNext()) {
4 System.out.println(cursor.next().toJson());
5 }
6} finally {
7 cursor.close();
8}

결과를 반복하여 콘솔에 인쇄합니다. 이와 같은 작업은 기본적으로 MongoDB Node.js 드라이버에서 비동기식 이며 이는 Node.js 런타임이 실행이 완료될 때까지 기다리는 동안 다른 작업을 차단하지 않는다는 의미입니다.

작업을 단순화하려면 await 키워드를 지정하여 런타임이 작업을 기다릴 수 있도록 합니다. 이 작업은 콜백을 지정하거나 프로미스를 연결하는 것보다 간편합니다.

자세한 내용은 Promise 및 콜백 가이드 를 참조하세요.

crud-read.js
// iterate code goes here
await cursor.forEach(console.log);
crud_read.py
# iterate code goes here
for doc in cursor:
print(doc)
5

다음은 전체 코드와 샘플 출력입니다.

참고

ObjectId 값은 표시된 값과 다를 수 있습니다.

다음은 전체 코드와 샘플 출력입니다.

CrudRead.cs
1using MongoDB.Bson;
2using MongoDB.Driver;
3
4// Replace the uri string with your MongoDB deployment's connection string.
5var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7var client = new MongoClient(uri);
8
9// database and collection code goes here
10var db = client.GetDatabase("sample_guides");
11var coll = db.GetCollection<BsonDocument>("planets");
12// find code goes here
13var cursor = from planet in coll.AsQueryable()
14 where planet["hasRings"] == true
15 select planet;
16// iterate code goes here
17foreach (var document in cursor)
18{
19 Console.WriteLine(document);
20}
21
22
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }

다음은 전체 코드와 샘플 출력입니다. 출력 문서는 표시를 위해 여기서는 잘라냈습니다.

crudRead.go
1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/bson"
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 uri := "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
14
15 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
16 if err != nil {
17 panic(err)
18 }
19
20 defer func() {
21 if err = client.Disconnect(context.TODO()); err != nil {
22 panic(err)
23 }
24 }()
25
26 // database and colletion code goes here
27 db := client.Database("sample_guides")
28 coll := db.Collection("planets")
29
30 // find code goes here
31 filter := bson.D{{"hasRings", true}}
32 cursor, err := coll.Find(context.TODO(), filter)
33 if err != nil {
34 panic(err)
35 }
36
37 // iterate code goes here
38 for cursor.Next(context.TODO()) {
39 var result bson.M
40 if err := cursor.Decode(&result); err != nil {
41 panic(err)
42 }
43 fmt.Println(result)
44 }
45 if err := cursor.Err(); err != nil {
46 panic(err)
47 }
48
49}
map[... hasRings:true name:Uranus ... ]]
map[... hasRings:true name:Neptune ... ]]
map[... hasRings:true name:Jupiter ... ]]
map[... hasRings:true name:Saturn ... ]]

다음은 전체 코드와 샘플 출력입니다.

CrudRead.java
1import com.mongodb.client.*;
2import com.mongodb.client.model.Filters.*;
3import org.bson.Document;
4import org.bson.conversions.Bson;
5
6public class CrudRead {
7 public static void main(String[] args) {
8 String uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
9
10 try (MongoClient mongoClient = MongoClients.create(uri)) {
11 // database and collection code goes here
12 MongoDatabase db = mongoClient.getDatabase("sample_guides");
13 MongoCollection<Document> coll = db.getCollection("planets");
14
15 // find code goes here
16 Bson filter = eq("hasRings", true);
17 MongoCursor<Document> cursor = coll.find(filter).iterator();
18
19 // iterate code goes here
20 try {
21 while (cursor.hasNext()) {
22 System.out.println(cursor.next().toJson());
23 }
24 } finally {
25 cursor.close();
26 }
27 }
28 }
29}
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }

다음은 전체 코드와 샘플 출력입니다.

crud-read.js
1const { MongoClient } = require("mongodb");
2// Replace the uri string with your MongoDB deployment's connection string.
3const uri =
4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
5const client = new MongoClient(uri);
6async function run() {
7 try {
8 await client.connect();
9 // database and collection code goes here
10 const db = client.db("sample_guides");
11 const coll = db.collection("planets");
12
13 // find code goes here
14 const cursor = coll.find({ hasRings: true });
15
16 // iterate code goes here
17 await cursor.forEach(console.log);
18 } finally {
19 // Ensures that the client will close when you finish/error
20 await client.close();
21 }
22}
23run().catch(console.dir);
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }

다음은 전체 코드와 샘플 출력입니다.

crud_read.py
1from pymongo import MongoClient
2
3# Replace the uri string with your MongoDB deployment's connection string.
4uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
5
6client = MongoClient(uri)
7
8# database and collection code goes here
9db = client.sample_guides
10coll = db.planets
11# find code goes here
12cursor = coll.find({"hasRings": True})
13# iterate code goes here
14for doc in cursor:
15 print(doc)
16
17# Close the connection to MongoDB when you're done.
18client.close()
{... 'name': 'Uranus', 'hasRings': True, ...}
{... 'name': 'Neptune', 'hasRings': True, ... }
{... 'name': 'Jupiter', 'hasRings': True, ... }
{... 'name': 'Saturn', 'hasRings': True, ... }
6

여러 기준을 사용하여 컬렉션을 쿼리할 수도 있습니다. 다음 예시에서는 여러 기준을 사용하여 hasRings 필드의 항목으로 값이 falseArgon(Ar)mainAtmosphere 필드가 있는 planets 컬렉션에서 문서를 조회하는 방법을 보여 줍니다.

다음은 전체 코드와 샘플 출력입니다.

CrudRead.cs
1// find code goes here
2var cursor = from planet in coll.AsQueryable()
3 where planet["hasRings"] == false
4 where planet["mainAtmosphere"] == "Ar"
5 select planet;
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }

다음은 전체 코드와 샘플 출력입니다. 출력 문서는 표시를 위해 여기서는 잘라냈습니다.

crudRead.go
1// find code goes here
2filter := bson.D{
3 {"$and",
4 bson.A{
5 bson.D{{"hasRings", false}},
6 bson.D{{"mainAtmosphere", "Ar"}},
7 },
8 },
9}
10cursor, err := coll.Find(context.TODO(), filter)
11if err != nil {
12 panic(err)
13}
map[... hasRings:false mainAtmosphere:[CO2 Ar N] ... ]]
map[... hasRings:false mainAtmosphere:[N O2 Ar] ... ]]

다음은 전체 코드와 샘플 출력입니다.

CrudRead.java
1// find code goes here
2Bson filter = and(eq("hasRings", false), eq("mainAtmosphere", "Ar"));
3MongoCursor<Document> cursor = coll.find(filter).iterator();
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }

다음은 전체 코드와 샘플 출력입니다.

crud-read.js
1// find code goes here
2const cursor = coll.find({ hasRings: false, mainAtmosphere: "Ar" });
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }
crud_read.py
1# find code goes here
2cursor = coll.find({"hasRings": False, "mainAtmosphere": "Ar"})
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... }
{..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }

mainAtmosphere 필드가 배열로 지정되었더라도 MongoDB는 배열을 일급 유형으로 취급하므로 엄격한 동등성 쿼리를 수행할 수 있습니다. 쿼리를 실행하는 동안 MongoDB는 배열의 각 항목을 지정한 값(이 경우 "Ar")과 비교하여 문서가 기준과 일치하는지 확인합니다.

가이드를 완료했다면 특정 동등 기준을 사용하여 MongoDB에서 데이터를 조회했을 것입니다. 이는 항목 번호, 사용자 이름 또는 화학 원소와 같이 조회하려는 항목을 정확히 알고 있을 때 유용합니다.

다음 가이드에서는 비교 연산자를 사용하여 MongoDB에서 데이터를 읽고 더 광범위한 기준과 일치하는 문서를 하는 방법을 배웁니다.

여기에 제시된 개념에 대한 자세한 내용은 다음 리소스를 참조하세요.

마지막으로
연산자 및 복합 쿼리를 사용하여 데이터 읽기
20분

MongoDB에서 문서를 검색하려면 연산자와 복합 쿼리를 사용합니다.

시작 가이드
2장
CRUD
  • MongoDB 드라이버 추가
  • MongoDB에서 데이터 읽기
  • 쿼리를 사용하여 MongoDB에서 데이터 읽기
  • 연산자 및 복합 쿼리를 사용하여 데이터 읽기
  • MongoDB에 데이터 삽입
  • MongoDB에서 데이터 업데이트
  • MongoDB에서 데이터 삭제