O método findOne() do MongoDB retorna apenas um documento que satisfaz os critérios inseridos. Se os critérios inseridos corresponderem a mais de um documento, o método retorna apenas um documento de acordo com a ordenação natural, que reflete a ordem em que os documentos são armazenados no banco de dados.
MongoDB findOne
A sintaxe do findOne() do MongoDB é:
db.collection.findOne(<critérios>, <projeção>)
critérios – especifica os critérios de seleção inseridos. projeção – especifica a lista de campos a serem exibidos no documento retornado. Alguns pontos importantes sobre o findOne do MongoDB:
- O parâmetro de projeção aceita os valores booleanos 1 ou true, 0 ou false. Se os campos de projeção não forem especificados, todos os campos serão recuperados.
- O findOne() do MongoDB sempre inclui o campo _id mesmo que não seja especificado explicitamente no parâmetro de projeção, a menos que seja excluído.
- O findOne() do MongoDB retorna apenas um documento, mas não um cursor.
Consulta findOne do MongoDB – Especificação de Consulta Vazia
Esta operação retorna um único documento da coleção especificada. Por exemplo, db.car.findOne()
Saída:
{
"_id" : 2,
"name" : "Polo", "color" : "White",
"cno" : "H411", "speed" : 45, "mfdcountry" : "Japan"
}
Apenas um registro é recuperado da coleção car
. Note que “Polo” foi inserido primeiro no banco de dados.
Consulta findOne do MongoDB – Especificação de Consulta
Esta operação findOne do MongoDB retorna o primeiro documento correspondente da coleção especificada juntamente com os critérios de seleção inseridos. Por exemplo:
>db.car.findOne(
... {
... $or:[
... {name:"Zen"},
... {speed: {$gt:60}} ... ]
... }
... )
{
"_id" : ObjectId("546cb92393f464ed49d620db"),
"name" : "Zen",
"color" : "JetRed",
"cno" : "H671",
"speed" : 67,
"mfdcountry" : "Rome"
}
Esta operação busca pelo carro chamado “Zen” ou pela velocidade maior que 60 e recupera o primeiro documento que satisfaz os critérios inseridos da coleção de carros.
Projeção no findOne do MongoDB
O parâmetro de projeção também é aplicável para o método findOne do MongoDB. Vamos ver alguns cenários onde podemos usar a projeção no findOne.
Localizar um documento no MongoDB – especificar os campos a serem retornados
Esta operação exibe apenas os campos especificados na consulta. Por exemplo:
>db.car.findOne(
... { },
... {name:1,color:1}
... )
{ "_id" : 2, "name" : "Polo", "color" : "White" }
O primeiro documento da coleção Carro com os campos id, nome e cor é exibido.
Localizar um documento no MongoDB – retornar todos os campos exceto o excluído
Esta operação recupera o primeiro documento, excluindo os campos especificados nos critérios de seleção. Por exemplo;
>db.car.findOne(
... { name:"Volkswagen" },
... {_id:0, mfdcountry:0,cno:0 }
... )
{ "name" : "Volkswagen", "color" : "JetBlue", "speed" : 62 }
O nome do carro com Volkswagen é recuperado, excluindo os campos id, país de fabricação e número do chassi.
Documento de resultado do findOne no MongoDB
Os métodos do cursor não funcionarão nesta operação, pois o método retorna apenas um único documento. Para imprimir os valores individuais do campo no documento, podemos usar o código abaixo.
>var car = db.car.findOne();
> if (car) {
... var carName = car.name;
... print (tojson(carName));
... }
"Polo"
Isto recupera apenas o nome do carro “Polo”.
Exemplo de findOne do MongoDB em Java
Abaixo está o programa em Java que mostra diferentes opções que podemos usar com o findOne() do MongoDB. 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 {
// o método recupera o primeiro documento sem nenhum critério
public static void emptyFindOne() throws UnknownHostException {
// Obtenha uma nova conexão com o banco de dados, assumindo que esteja em execução
MongoClient mongoClient = new MongoClient("localhost");
// use "test" como banco de dados, substitua pelo seu
DB db = mongoClient.getDB("test");
// obtenha o objeto de coleção, "car" é usado aqui, substitua pelo seu
DBCollection coll = db.getCollection("car");
// invocando o método findOne()
DBObject doc = coll.findOne();
// imprime o documento resultante
System.out.println(doc);
}
// método que recupera o documento com base nos critérios de seleção
public static void querySpecification() throws UnknownHostException {
// não é necessário obter uma conexão toda vez (pode ser feito uma vez)
// globally).
MongoClient mongoClient = new MongoClient("localhost");
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("car");
// consulta para filtrar o documento com base nos valores de nome e velocidade
// criação de um novo objeto
DBObject query = new BasicDBObject("name", "Zen").append("speed",
new BasicDBObject("$gt", 30));
// documento resultante recuperado ao satisfazer os critérios
DBObject d1 = coll.findOne(query);
// imprime o documento no console
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");
// criação de um novo objeto de banco de dados
BasicDBObject b1 = new BasicDBObject();
// critérios para exibir apenas os campos de nome e cor no resultado
// document
BasicDBObject fields = new BasicDBObject("name", 1).append("color", 1);
// método que recupera os documentos aceitando campos e objeto
// 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");
// critérios de filtro para o nome do carro "volkswagen"
DBObject query = new BasicDBObject("name", "Volkswagen");
// excluindo os campos mfdcountry, cno e 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();
// imprime apenas o nome do carro
System.out.println((d1.get("name")));
}
public static void main(String[] args) throws UnknownHostException {
// invocando todos os métodos a partir do principal
emptyFindOne();
querySpecification();
projectionFields();
excludeByfields();
printDoc();
}
}
Saída do programa acima é:
{ "_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
Isso é tudo para o método findOne() do MongoDB, vamos analisar mais opções do MongoDB em próximas postagens. Referência: Documento Oficial
Source:
https://www.digitalocean.com/community/tutorials/mongodb-findone-example