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 ordem natural, que reflete a ordem em que os documentos são armazenados no banco de dados.
MongoDB findOne
A sintaxe do MongoDB findOne() é:
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 MongoDB findOne:
- O parâmetro de projeção aceita os valores booleanos de 1 ou verdadeiro, 0 ou falso. Se os campos de projeção não forem especificados, todos os campos serão recuperados.
- O MongoDB findOne() sempre inclui o campo _id mesmo se não for especificado explicitamente no parâmetro de projeção, a menos que seja excluído.
- O MongoDB findOne() retorna apenas um documento, mas não um cursor.
MongoDB findOne – Especificação de Consulta Vazia
Essa 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
. Observe que “Polo” foi inserido primeiro no banco de dados.
MongoDB findOne – Especificação de Consulta
Esta operação MongoDB findOne 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 procura pelo carro chamado “Zen” ou com velocidade maior que 60 e recupera o primeiro documento que satisfaz os critérios inseridos da coleção de carros.
Projeção no MongoDB findOne()
O parâmetro de projeção também é aplicável ao método MongoDB findOne. Vamos analisar alguns cenários em que podemos usar projeção no findOne.
Encontrar 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.
Encontrar 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 cno.
Documento de resultado do findOne do 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 dos campos do 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 Java mostrando 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 presumindo que ele esteja em execução
MongoClient mongoClient = new MongoClient("localhost");
// use test como banco de dados, use o seu banco de dados aqui
DB db = mongoClient.getDB("test");
// obtenha o objeto de coleção, aqui é usado 'car', use o seu próprio
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
// criando um novo objeto
DBObject query = new BasicDBObject("name", "Zen").append("speed",
new BasicDBObject("$gt", 30));
// documento resultante obtido 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 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ério 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 main
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 explorar mais opções do MongoDB em postagens futuras. Referência: Documento Oficial
Source:
https://www.digitalocean.com/community/tutorials/mongodb-findone-example