MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Recuperar um valor do MongoDB por seu nome de chave

1. Visão geral


Neste tutorial, aprenderemos como recuperar um valor do MongoDB pelo nome da chave. Exploraremos vários métodos do MongoDB para buscar os nomes dos campos chave dos documentos com base nos filtros aplicados. Primeiro, usaremos o find ou terminado método para buscar os dados necessários e depois usar a agregação método. Aqui, escreveremos consultas tanto na consulta do shell do MongoDB quanto no código do driver Java.

Vejamos as diferentes maneiras de recuperar o valor no MongoDB por um nome de campo.

2. Inicialização do banco de dados


Para começar, precisamos configurar um novo banco de dados baeldung e uma nova coleção, viagem :
use baeldung;
db.createCollection(travel);

Vamos agora adicionar alguns dados fictícios à coleção usando o insertMany método do MongoDB:
db.travel.insertMany([
{ 
    "passengerId":145,
    "passengerName":"Nathan Green",
    "passengerAge":25,
    "sourceStation":"London",
    "destinationStation":"Birmingham",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
},
{ 
    "passengerId":148,
    "passengerName":"Kevin Joseph",
    "passengerAge":28,
    "sourceStation":"Manchester",
    "destinationStation":"London",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
},
{ 
    "passengerId":154,
    "passengerName":"Sheldon burns",
    "passengerAge":26,
    "sourceStation":"Cambridge",
    "destinationStation":"Leeds",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
},
{ 
    "passengerId":168,
    "passengerName":"Jack Ferguson",
    "passengerAge":24,
    "sourceStation":"Cardiff",
    "destinationStation":"Coventry",
    "seatType":"Slepper",
    "emailAddress":"[email protected]"
}
]);

O insertMany acima query retornará o seguinte JSON:
{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("623d7f079d55d4e137e47825"),
	ObjectId("623d7f079d55d4e137e47826"),
	ObjectId("623d7f079d55d4e137e47827"),
        ObjectId("623d7f079d55d4e137e47828")
    ]
}

Até agora, inserimos os dados fictícios na coleção viagem .

3. Usando o localizar Método


O encontrar O método localiza e retorna documentos que correspondem aos critérios de consulta especificados na coleção. Se vários documentos corresponderem à condição, ele retornará todos os documentos com base na ordem dos documentos no disco. Além disso, no MongoDB, o find O método dá suporte à projeção de parâmetros na consulta. Se especificarmos um parâmetro de projeção no find método, ele retornará todos os documentos contendo apenas campos de projeção.

Um ponto importante a ser observado é que o _id campo é sempre incluído na resposta, a menos que seja explicitamente removido.

Para demonstrar, vamos examinar a consulta do shell para projetar um campo-chave:
db.travel.find({},{"passengerId":1}).pretty();

A resposta para a pergunta acima será:
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }

Aqui, nesta consulta, simplesmente projetamos o passengerId. Vamos agora analisar o campo-chave com a exclusão de _id :
db.travel.find({},{"passengerId":1,"_id":0}).pretty();

A consulta acima terá a seguinte resposta:
{ "passengerId" : 145 }
{ "passengerId" : 148 }
{ "passengerId" : 154 }
{ "passengerId" : 168 }

Aqui, nesta consulta, excluímos o _id campo da projeção de resposta. Vamos ver o código do driver Java para a consulta acima:
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB database = mongoClient.getDB("baeldung");
DBCollection collection = database.getCollection("travel");
BasicDBObject queryFilter = new BasicDBObject();
BasicDBObject projection = new BasicDBObject();
projection.put("passengerId", 1);
projection.put("_id", 0);
DBCursor dbCursor = collection.find(queryFilter, projection);
while (dbCursor.hasNext()) {
    System.out.println(dbCursor.next());
}

No código acima, primeiro, criamos um MongoClient conexão com o servidor mongo local em execução na porta 27017 . Em seguida, usamos o find método, que tem dois parâmetros, o queryFilter, e projeção. A consulta DBObject contém os filtros nos quais precisamos buscar os dados. Aqui imprimimos todos os campos projetados de documentos de viagem usando o DBCursor .

4. Como usar a agregação Método


A agregação operações no MongoDB processam registros de dados e documentos e retornam resultados computados. Ele coleta valores de vários documentos e os agrupa antes de realizar diferentes tipos de operações nos dados agrupados, como soma, média, mínimo, máximo, etc.

Podemos usar o pipeline de agregação do MongoDB quando precisarmos fazer uma agregação mais complexa. Os pipelines de agregação são coleções de estágios combinados com a sintaxe de consulta do MongoDB para gerar resultados agregados.

Vamos examinar a consulta de agregação para recuperar o valor pelo nome da chave:
db.travel.aggregate([
{
    "$project":{
        "passengerId":1
    }
}
]).pretty();

A resposta à consulta de agregação acima será:
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }

Neste caso, usamos o $project etapa do pipeline de agregação. $projeto especifica quais campos incluir ou excluir. Em nossa consulta, passamos apenas o passageId para o estágio de projeção.

Vejamos o código do driver Java para a consulta acima:
ArrayList<Document> response = new ArrayList<>();
ArrayList<Document> pipeline = new ArrayList<>(Arrays.asList(new Document("$project", new Document("passengerId", 1L))));
database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- " + response);

Também podemos escrever o pipeline de agregação da seguinte maneira:
ArrayList<Document> response = new ArrayList<>();
ArrayList<Bson> pipeline = new ArrayList<>(Arrays.asList(
  project(fields(Projections.exclude("_id"), Projections.include("passengerId")))));
MongoDatabase database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- "+response);

Criamos um pipeline de agregação com o código do driver java e definimos o estágio do projeto apenas para incluir o passengerId campo. Por fim, passamos o pipeline de agregação para o aggregate método para recuperar os dados.