쿼리를 사용하여 MongoDB에서 데이터 읽기
개요
이전 가이드 인 MongoDB 에서 데이터 읽기 에서는 문서가 충족해야 하는 기준을 지정하지 않고 sample_guides.planets
컬렉션 에서 모든 문서를 조회했습니다.
이 가이드에서는 컬렉션을 쿼리하여 특정 동일성 기준에 일치하는, 즉 지정된 필드의 값이 일치하는 문서를 검색하는 방법을 설명합니다.
소요 시간: 15분
준비물
절차
MongoDB 인스턴스에 연결합니다.
팁
이 코드 블록에는 연결 URI를 사용자의 URI으로 바꿀 수 있는 주석이 있습니다. URI 문자열을 자체 Atlas 연결 문자열로 바꿉니다.
팁
다음은 MongoDB에 접속하기 위해 필요한 최소한의 코드를 간략하게 정리한 것이다. 다음 몇몇 단계에서는 데이터를 읽기 위해 추가 작업을 수행합니다.
5번째 줄에서 URI 문자열을 자체 Atlas 연결 문자열로 대체합니다.
1 using MongoDB.Bson;
2 using MongoDB.Driver;
3
4 // Replace the uri string with your MongoDB deployment's connection string.
5 var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7 var 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 로 바꿉니다.
1 package main 2 3 import ( 4 "context" 5 6 "go.mongodb.org/mongo-driver/mongo" 7 "go.mongodb.org/mongo-driver/mongo/options" 8 ) 9 10 func 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 로 바꿉니다.
1 import com.mongodb.client.*; 2 import com.mongodb.client.model.Filters.*; 3 import org.bson.Document; 4 import org.bson.conversions.Bson; 5 6 public 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 연결 문자열로 대체합니다.
1 const { MongoClient } = require("mongodb"); 2 // Replace the uri string with your MongoDB deployment's connection string. 3 const uri = 4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"; 5 const client = new MongoClient(uri); 6 async 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 } 17 run().catch(console.dir);
팁
다음은 MongoDB에 접속하기 위해 필요한 최소한의 코드를 간략하게 정리한 것이다. 다음 몇몇 단계에서는 데이터를 읽기 위해 추가 작업을 수행합니다.
4번째 줄에서 URI 문자열을 자체 Atlas 연결 문자열로 대체합니다.
1 from pymongo import MongoClient 2 3 # Replace the uri string with your MongoDB deployment's connection string. 4 uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority" 5 6 client = 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. 13 client.close()
팁
mongodb+srv
PyMongo를 srv
옵션으로 설치했는지 확인합니다.
python3 -m pip install "pymongo[srv]"
데이터베이스와 collection을 가져옵니다.
쿼리하려는 데이터베이스 및 컬렉션으로 전환합니다. 이 경우에는 sample_guides
데이터베이스와 planets
컬렉션을 사용합니다.
// database and collection code goes here
var db = client.GetDatabase("sample_guides");
var coll = db.GetCollection<BsonDocument>("planets");
1 // database and colletion code goes here 2 db := client.Database("sample_guides") 3 coll := db.Collection("planets")
1 // database and collection code goes here 2 MongoDatabase db = mongoClient.getDatabase("sample_guides"); 3 MongoCollection<Document> coll = db.getCollection("planets");
// database and collection code goes here const db = client.db("sample_guides"); const coll = db.collection("planets");
# database and collection code goes here db = client.sample_guides coll = db.planets
컬렉션 에서 특정 planets
문서를 조회합니다.
쿼리 필터를 적용하여 컬렉션에서 특정 문서를 조회할 수 있습니다.
쿼리 필터는 검색 중인 기준이 포함된 문서입니다.
다음 예시에서는 쿼리 필터를 사용하여 값이 true
인 hasRings
필드가 있는 planets
컬렉션의 문서를 조회하는 방법을 보여 줍니다.
// find code goes here
var cursor = from planet in coll.AsQueryable()
where planet["hasRings"] == true
select planet;
팁
BSON.D
BSON.D
이(가) 주문되었으므로 MongoDB 로 문서를 보낼 때 사용해야 합니다. 이는 보다 복잡한 작업에서 중요합니다.
1 // find code goes here 2 filter := bson.D{{"hasRings", true}} 3 cursor, err := coll.Find(context.TODO(), filter) 4 if err != nil { 5 panic(err) 6 }
MongoDB Java 드라이버 에는 쿼리(및 기타 작업) 생성 프로세스 를 간소화하는 빌더 가 포함되어 있습니다. 여기서는 Filters.eq
빌더를 사용하여 쿼리 문서 를 구성합니다.
1 // find code goes here 2 Bson filter = eq("hasRings", true); 3 MongoCursor<Document> cursor = coll.find(filter).iterator();
// find code goes here const cursor = coll.find({ hasRings: true });
# find code goes here cursor = coll.find({"hasRings": True})
결과를 반복합니다.
// iterate code goes here
foreach (var document in cursor.ToEnumerable())
{
Console.WriteLine(document);
}
1 // iterate code goes here 2 for 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 } 9 if err := cursor.Err(); err != nil { 10 panic(err) 11 }
1 // iterate code goes here 2 try { 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 및 콜백 가이드 를 참조하세요.
// iterate code goes here await cursor.forEach(console.log);
# iterate code goes here for doc in cursor: print(doc)
결과를 확인합니다.
다음은 전체 코드와 샘플 출력입니다.
참고
ObjectId
값은 표시된 값과 다를 수 있습니다.
다음은 전체 코드와 샘플 출력입니다.
1 using MongoDB.Bson;
2 using MongoDB.Driver;
3
4 // Replace the uri string with your MongoDB deployment's connection string.
5 var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7 var client = new MongoClient(uri);
8
9 // database and collection code goes here
10 var db = client.GetDatabase("sample_guides");
11 var coll = db.GetCollection<BsonDocument>("planets");
12 // find code goes here
13 var cursor = from planet in coll.AsQueryable()
14 where planet["hasRings"] == true
15 select planet;
16 // iterate code goes here
17 foreach (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, ... }
다음은 전체 코드와 샘플 출력입니다. 출력 문서는 표시를 위해 여기서는 잘라냈습니다.
1 package main 2 3 import ( 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 12 func 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 ... ]]
다음은 전체 코드와 샘플 출력입니다.
1 import com.mongodb.client.*; 2 import com.mongodb.client.model.Filters.*; 3 import org.bson.Document; 4 import org.bson.conversions.Bson; 5 6 public 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, ... }
다음은 전체 코드와 샘플 출력입니다.
1 const { MongoClient } = require("mongodb"); 2 // Replace the uri string with your MongoDB deployment's connection string. 3 const uri = 4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"; 5 const client = new MongoClient(uri); 6 async 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 } 23 run().catch(console.dir);
{... 'name': 'Uranus', 'hasRings': True, ...} {... 'name': 'Neptune', 'hasRings': True, ... } {... 'name': 'Jupiter', 'hasRings': True, ... } {... 'name': 'Saturn', 'hasRings': True, ... }
다음은 전체 코드와 샘플 출력입니다.
1 from pymongo import MongoClient 2 3 # Replace the uri string with your MongoDB deployment's connection string. 4 uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority" 5 6 client = MongoClient(uri) 7 8 # database and collection code goes here 9 db = client.sample_guides 10 coll = db.planets 11 # find code goes here 12 cursor = coll.find({"hasRings": True}) 13 # iterate code goes here 14 for doc in cursor: 15 print(doc) 16 17 # Close the connection to MongoDB when you're done. 18 client.close()
{... 'name': 'Uranus', 'hasRings': True, ...} {... 'name': 'Neptune', 'hasRings': True, ... } {... 'name': 'Jupiter', 'hasRings': True, ... } {... 'name': 'Saturn', 'hasRings': True, ... }
여러 기준을 사용하여 쿼리합니다.
여러 기준을 사용하여 컬렉션을 쿼리할 수도 있습니다. 다음 예시에서는 여러 기준을 사용하여 hasRings
필드의 항목으로 값이 false
및 Argon(Ar)
인 mainAtmosphere
필드가 있는 planets
컬렉션에서 문서를 조회하는 방법을 보여 줍니다.
다음은 전체 코드와 샘플 출력입니다.
1 // find code goes here
2 var 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"], ... }
다음은 전체 코드와 샘플 출력입니다. 출력 문서는 표시를 위해 여기서는 잘라냈습니다.
1 // find code goes here 2 filter := bson.D{ 3 {"$and", 4 bson.A{ 5 bson.D{{"hasRings", false}}, 6 bson.D{{"mainAtmosphere", "Ar"}}, 7 }, 8 }, 9 } 10 cursor, err := coll.Find(context.TODO(), filter) 11 if err != nil { 12 panic(err) 13 }
map[... hasRings:false mainAtmosphere:[CO2 Ar N] ... ]] map[... hasRings:false mainAtmosphere:[N O2 Ar] ... ]]
다음은 전체 코드와 샘플 출력입니다.
1 // find code goes here 2 Bson filter = and(eq("hasRings", false), eq("mainAtmosphere", "Ar")); 3 MongoCursor<Document> cursor = coll.find(filter).iterator();
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... } {..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }
다음은 전체 코드와 샘플 출력입니다.
1 // find code goes here 2 const cursor = coll.find({ hasRings: false, mainAtmosphere: "Ar" });
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... } {..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }
1 # find code goes here 2 cursor = coll.find({"hasRings": False, "mainAtmosphere": "Ar"})
{..., "name" : "Mars", "mainAtmosphere" : ["CO2", "Ar", "N"], ... } {..., "name" : "Earth", "mainAtmosphere" : ["N", "O2", "Ar"], ... }
mainAtmosphere
필드가 배열로 지정되었더라도 MongoDB는 배열을 일급 유형으로 취급하므로 엄격한 동등성 쿼리를 수행할 수 있습니다. 쿼리를 실행하는 동안 MongoDB는 배열의 각 항목을 지정한 값(이 경우 "Ar"
)과 비교하여 문서가 기준과 일치하는지 확인합니다.
요약
가이드를 완료했다면 특정 동등 기준을 사용하여 MongoDB에서 데이터를 조회했을 것입니다. 이는 항목 번호, 사용자 이름 또는 화학 원소와 같이 조회하려는 항목을 정확히 알고 있을 때 유용합니다.
다음 가이드에서는 비교 연산자를 사용하여 MongoDB에서 데이터를 읽고 더 광범위한 기준과 일치하는 문서를 하는 방법을 배웁니다.
다음도 참조하세요.
여기에 제시된 개념에 대한 자세한 내용은 다음 리소스를 참조하세요.