Ler dados do MongoDB com queries
Visão geral
No guia anterior, Ler dados no MongoDB, você recuperou todos os documentos da collection sample_guides.planets
sem especificar nenhum critério que os documentos deveriam atender.
Neste guia, você consultará a coleta e recuperará documentos que correspondam a critérios de igualdade específicos, o que significa que os valores do campo ou campos especificados devem corresponder.
Tempo necessário: 15 minutos
O que você precisa
Uma connection string para sua deployment do MongoDB.
Exemplos de conjuntos de dados carregados em seu cluster.
Procedimento
Conecte-se à sua instância do MongoDB.
Dica
Neste bloco de código, há um comentário para substituir a URI da conexão pela sua. Substitua a string URI pela sua própria connection string do Atlas.
Dica
Veja a seguir um esboço com o código mínimo necessário para se conectar ao MongoDB. Você fará adições nas próximas etapas para ler os dados.
Na linha 5, substitua a string URI por sua própria connection string 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
Dica
Veja a seguir um esboço com o código mínimo necessário para se conectar ao MongoDB. Você fará adições nas próximas etapas para ler os dados.
Na linha 11, substitua a string URI por sua própria string de conexão Atlas .
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 }
Dica
Veja a seguir um esboço com o código mínimo necessário para se conectar ao MongoDB. Você fará adições nas próximas etapas para ler os dados.
Na linha 8, substitua a string URI por sua própria string de conexão Atlas .
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 }
Dica
Veja a seguir um esboço com o código mínimo necessário para se conectar ao MongoDB. Você fará adições nas próximas etapas para ler os dados.
Na linha 4, substitua a string URI pela sua própria connection string do 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);
Dica
Veja a seguir um esboço com o código mínimo necessário para se conectar ao MongoDB. Você fará adições nas próximas etapas para ler os dados.
Na linha 4, substitua a string URI pela sua própria connection string do 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()
Dica
MongoDB+srv
Certifique-se de ter instalado o PyMongo com a opção srv
.
python3 -m pip install "pymongo[srv]"
Obtenha o banco de dados e a collection.
Mude para o banco de dados e a coleta que você deseja consultar. Nesse caso, você usará o banco de dados sample_guides
e a coleta 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
Recupere documentos específicos na planets
coleta.
Você pode recuperar documentos específicos de uma coleta aplicando um filtro de consulta. Um filtro de consulta é um documento que contém os critérios que você está procurando. O exemplo seguinte ilustra utilizando um filtro de consulta para recuperar documentos da coleta planets
que têm um campo hasRings
com um valor de true
.
// find code goes here
var cursor = from planet in coll.AsQueryable()
where planet["hasRings"] == true
select planet;
Dica
BSON.D
deve ser usado ao enviar documentos para o MongoDB, porque BSON.D
é pedido. Isso é importante em operações mais complexas.
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 }
O driver Java do MongoDB inclui construtores que simplificam o processo de criação de query (e outras operações). Aqui, você usa o construtor Filters.eq
para construir o documento de query.
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})
Iterar sobre os resultados.
// 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 }
Itere os resultados e imprima-os no console. Operações como essa são asychronous no driver Node.js do MongoDB por padrão, o que significa que o tempo de execução do Node.js não bloqueia outras operações enquanto espera que elas terminem a execução.
Para simplificar a operação, você especifica a palavra-chave await
, que fará com que o tempo de execução aguarde a operação. Isso geralmente é mais fácil do que especificar uma chamada de resposta, ou encadear uma promessa.
Para obter mais informações, consulte o guia Promise and Callbacks.
// iterate code goes here await cursor.forEach(console.log);
# iterate code goes here for doc in cursor: print(doc)
Verifique seus resultados.
Aqui está o código completo seguido de saída de amostra.
Observação
Seus valores ObjectId
serão diferentes daqueles mostrados.
Aqui está o código completo seguido de saída de amostra.
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, ... }
Veja o código completo, seguido pela amostra de saída. Os documentos de saída foram truncados aqui para fins de exibição.
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 ... ]]
Aqui está o código completo seguido de saída de amostra.
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, ... }
Aqui está o código completo seguido de saída de amostra.
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, ... }
Aqui está o código completo seguido de saída de amostra.
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, ... }
Query usando vários critérios.
Você também pode consultar a collection usando vários critérios. O exemplo a seguir ilustra o uso de vários critérios para recuperar documentos da collection planets
que tem um campo hasRings
com um valor de false
e Argon(Ar)
como uma entrada no campo mainAtmosphere
.
Aqui está o código completo seguido de saída de amostra.
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"], ... }
Veja o código completo, seguido pela amostra de saída. Os documentos de saída foram truncados aqui para fins de exibição.
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] ... ]]
Aqui está o código completo seguido de saída de amostra.
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"], ... }
Aqui está o código completo seguido de saída de amostra.
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"], ... }
Mesmo que o campo mainAtmosphere
seja uma matriz, você pode usar uma consulta de igualdade estrita porque o MongoDB trata matrizes como tipos de primeira classe. Durante a execução da consulta, o MongoDB comparou cada entrada na matriz com o valor que você especificou, neste caso "Ar"
, para determinar se os documentos correspondiam aos seus critérios.
Resumo
Se você concluiu este guia, recuperou dados do MongoDB usando critérios de igualdade específicos. Isso é útil quando você sabe exatamente o que está procurando, por exemplo, um número de item, um nome de usuário ou um elemento químico.
No próximo guia, você aprenderá como ler dados do MongoDB usando operadores de comparação para recuperar documentos que correspondam a um conjunto mais amplo de critérios.
Veja também
Consulte os seguintes recursos para obter informações mais detalhadas sobre os conceitos apresentados aqui:
O driver MongoDB C# documentação
A documentação do driver Go do MongoDB
A documentação do driver MongoDB Java(Sync)
Documentação do driver Node.js do MongoDB
O PyMongo documentação
Use operadores e consultas compostas para recuperar documentos no MongoDB.