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

Como retornar apenas o valor no MongoDB


Quando você usa métodos como find() ou findOne() no MongoDB, por padrão, você obtém todo o documento retornado. E se você usar projeções, poderá retornar pares de chave/valor específicos.

Mas e se você quiser apenas o valor?

Você pode extrair o valor de um campo anexando o nome desse campo à sua consulta ao usar findOne() .

Exemplo


Suponha que tenhamos uma coleção chamada products com os seguintes documentos:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "M", "L" ] } 
Se quiséssemos devolver o produto do primeiro documento, poderíamos fazer o seguinte:
db.products.findOne().product 

Resultado:
Morcego

Observe que usamos o findOne() método. Esta técnica não funciona no find() método. O findOne() retorna um único documento, enquanto o método find() O método simplesmente retorna um cursor para o documento.

Se quiséssemos retornar o array, poderíamos fazer isso:
db.products.findOne().sizes 

Resultado:
[ "S", "M", "L" ]

E podemos obter um valor de matriz referenciando seu índice:
db.products.findOne().sizes[0] 

Resultado:
S

As matrizes são baseadas em zero e, portanto, 0 referencia o primeiro elemento na matriz, 1 referencia o segundo elemento, 2 o terceiro, e assim por diante.

Documento específico


Por padrão, o findOne() retorna o primeiro documento da coleção. Podemos selecionar um documento diferente especificando a passagem de uma consulta como o primeiro argumento.

Eu digo “primeiro argumento” porque findOne() também aceita uma projection argumento como um segundo argumento opcional.
db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes 

Resultado:
[ "S", "L", "XL" ] 

Nesse caso, adicionei um argumento de projeção, mas não teve efeito no resultado. Mas teria um efeito se eu tivesse especificado um valor de 0. Isso resultaria em nada sendo retornado.

Documentos incorporados


Você pode usar a notação de ponto para retornar valores de documentos incorporados

Exemplo de documento:
{ "_id" :1, "name" :"Wag", "details" :{ "type" :"Dog", "weight" :20 }}

Poderíamos fazer o seguinte para retornar um valor do documento incorporado:
db.pets.findOne().details.type 

Resultado:
Cão