Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/ /

Ler dados do Atlas MongoDB - Funções

Nesta página

  • Visão geral
  • Modelo de dados
  • Configuração do trecho
  • Métodos de query
  • Encontrar um único documento (findOne())
  • Localize um ou mais documentos (find())
  • Contagem de documentos na coleção (count())
  • Padrões de query
  • Encontrar por ID do documento
  • Encontrar por data
  • Corresponder a um campo de nível raiz
  • Combinar vários campos
  • Combinar um campo de documento incorporado
  • Corresponder a uma array de valores
  • Combine um elemento de array
  • Operadores de Consulta
  • Compare Values
  • Avalie uma expressão lógica
  • Avaliar uma expressão regular

Os exemplos nesta página demonstram como usar a API de query do MongoDB em uma função para ler documentos do seu Atlas cluster.

Saiba mais sobre osmétodos que você pode chamar para consultar dados, os operadores que permitem gravar filtros de correspondência expressivos e alguns padrões para combiná-los para gerenciar casos de uso comuns.

Os exemplos nesta página usam uma coleção chamada store.items que modela vários itens disponíveis para compra em uma loja virtual. Cada item possui um name, um inventário quantity e uma array de clientes reviews.

O JSON schema para store.items
{
"title": "Item",
"required": ["_id", "name", "quantity", "reviews"],
"properties": {
"_id": { "bsonType": "objectId" },
"name": { "bsonType": "string" },
"quantity": { "bsonType": "int" },
"reviews": {
"bsonType": "array",
"items": {
"bsonType": "object",
"required": ["username", "comment"],
"properties": {
"username": { "bsonType": "string" },
"comment": { "bsonType": "string" }
}
}
}
}
}

Para usar um trecho de código em uma função, você deve primeiro instanciar um identificador de coleção do MongoDB:

exports = function() {
const mongodb = context.services.get("mongodb-atlas");
const itemsCollection = mongodb.db("store").collection("items");
const purchasesCollection = mongodb.db("store").collection("purchases");
// ... paste snippet here ...
}

Você pode encontrar um único documento usando o método collection.findOne().

O seguinte trecho de função encontra um único documento da collection items que possui um quantity maior ou igual a 25:

const query = { "quantity": { "$gte": 25 } };
const projection = {
"title": 1,
"quantity": 1,
}
return itemsCollection.findOne(query, projection)
.then(result => {
if(result) {
console.log(`Successfully found document: ${result}.`);
} else {
console.log("No document matches the provided query.");
}
return result;
})
.catch(err => console.error(`Failed to find document: ${err}`));

Você pode encontrar vários documentos usando o método collection.find().

O trecho de função abaixo localiza todos os documentos na collection items que têm pelo menos uma revisão e os retorna classificados por name com o campo _id omitido:

const query = { "reviews.0": { "$exists": true } };
const projection = { "_id": 0 };
return itemsCollection.find(query, projection)
.sort({ name: 1 })
.toArray()
.then(items => {
console.log(`Successfully found ${items.length} documents.`)
items.forEach(console.log)
return items
})
.catch(err => console.error(`Failed to find documents: ${err}`))

Você pode contar documentos em uma coleção usando o método collection.count(). Você pode especificar uma query para controlar quais documentos contar. Se você não especificar uma query, o método contará todos os documentos da coleção.

O trecho de função a seguir conta o número de documentos na coleção items que têm pelo menos uma revisão:

return itemsCollection.count({ "reviews.0": { "$exists": true } })
.then(numDocs => console.log(`${numDocs} items have a review.`))
.catch(err => console.error("Failed to count documents: ", err))

Você pode executar query de uma coleção para localizar um documento que tenha um ID especificado. O MongoDB armazena automaticamente o ID de cada documento como um valor ObjectId no campo _id do documento.

{ "_id": <ObjectId> }

Exemplo

A query a seguir corresponde a um documento na coleção com um valor de _id de 5ad84b81b8b998278f773c1b:

{ "_id": BSON.ObjectId("5ad84b81b8b998278f773c1b") }

Você pode fazer query de uma collection para localizar documentos que tenham um campo com um valor de data específico ou fazer query de documentos dentro de um intervalo de datas.

{ "<Date Field Name>": <Date | Expression> }

Exemplo

A query abaixo corresponde aos documentos da collection que têm uma data de createdAt de 23 de janeiro de 2019:

{ "createdAt": new Date("2019-01-23T05:00:00.000Z") }

Exemplo

A query a seguir corresponde a documentos da coleção que têm uma data createdAt em algum momento do ano de 2019:

{
"createdAt": {
"$gte": new Date("2019-01-01T00:00:00.000Z"),
"$lt": new Date("2020-01-01T00:00:00.000Z"),
}
}

Você pode fazer query de uma collection com base no valor de um campo de nível raiz em cada documento. Você pode especificar um valor específico ou uma expressão aninhada que o MongoDB avalia para cada documento.

Para obter mais informações, consulte o tutorial Query de documentos no manual do MongoDB Server.

{ "<Field Name>": <Value | Expression> }

Exemplo

A seguinte query corresponde a documentos onde o campo name tem um valor de Basketball:

{ "name": "Basketball" }

Você pode especificar várias condições de query em um único documento de query. Cada campo de nível raiz de um documento de query mapeia um campo na coleção. O MongoDB só retorna documentos que atendam a todas as condições de query.

Para obter mais informações, consulte o tutorial Query on Embedded/Nested Documents (Consultar documentos incorporados/aninhados ) no Manual do MongoDB Server.

{
"<Field Name 1>": <Value | Expression>,
"<Field Name 2>": <Value | Expression>
}

Exemplo

A seguinte query corresponde a documentos onde o campo name tem um valor de Basketball e o valor quantity é maior que zero:

{
"name": "Basketball",
"quantity": { "$gt": 0 }
}

Você pode fazer query de uma collection com base no valor dos campos de documento incorporado . Para especificar um campo de documento incorporado , use várias expressões de query aninhadas ou notação de pontodocumento padrão.

Para obter mais informações, consulte o tutorial Query on Embedded/Nested Documents (Consultar documentos incorporados/aninhados ) no Manual do MongoDB Server.

Expressões de query aninhadas
{ "<Field Name>": { "<Nested Field Name>": <Value | Expression> } }
Notação de ponto
{ "<Field Name>.<Nested Field Name>": <Value | Expression> }

Exemplo

A seguinte query corresponde a documentos em que a primeira avaliação na array reviews foi deixada por alguém com o nome de usuário JoeMango:

{
"reviews.0.username": "JoeMango"
}

Você pode fazer query de uma collection com base em todos os elementos contidos em um campo de array.

Se você fizer query de um campo de array para uma array específica de valores, o MongoDB retornará documentos em que o campo de array corresponde exatamente à array de valores especificada. Se você quiser que o MongoDB retorne documentos onde o campo de array contém todos os elementos na array de valores especificada, use o operador $all .

Para obter mais informações, consulte o tutorial Query de array no manual do MongoDB Server.

{ "<Array Field Name>": [<Value>, ...] }

Exemplo

A consulta abaixo corresponde a documentos em que a array reviews contém exatamente um elemento e o elemento corresponde ao documento especificado:

{
"reviews": [{ username: "JoeMango", comment: "This rocks!" }]
}

Exemplo

A query abaixo corresponde a documentos onde a array reviews contém um ou mais elementos que correspondem a todos os documentos especificados:

{
"reviews": {
"$all": [{ username: "JoeMango", comment: "This rocks!" }]
}
}

Você pode executar uma query de uma coleção com base no valor de um ou mais elementos em um campo de array.

Se você executar uma query de um campo de array com uma expressão de query que tenha várias condições, o MongoDB retornará documentos em que qualquer combinação de elementos da array satisfaça a expressão. Se você quiser que o MongoDB retorne documentos em que um único elemento do array satisfaça todas as condições da expressão , use o operador $elemMatch .

Para obter mais informações, consulte o tutorial Query de array no manual do MongoDB Server.

{ "<Array Field Name>": <Value | Expression> }

Exemplo

A query abaixo corresponde a documentos em que ambas as condições na expressão incorporada são atendidas por qualquer combinação de elementos na array reviews. Os valores username e comment especificados não precisam estar no mesmo documento:

{
"reviews": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}

Exemplo

A query a seguir corresponde a documentos em que ambas as condições na expressão incorporada são atendidas por um único elemento na array reviews. username e comment especificados devem estar no mesmo documento:

{
"reviews": {
"$elemMatch": {
"username": "JoeMango",
"comment": "This is a great product!"
}
}
}

Você pode usar um operador de comparação para comparar o valor de um campo de documento com outro valor.

{ "<Field Name>": { "<Comparison Operator>": <Comparison Value> } }

Os seguintes operadores de comparação estão disponíveis:

Operador de comparação
Descrição
Corresponde a documentos em que o valor de um campo é igual a um valor especificado.
Corresponde a documentos em que o valor de um campo não é igual a um valor especificado.
Corresponde a documentos em que o valor de um campo é estritamente maior que um valor especificado.
Corresponde aos documentos onde o valor de um campo é maior ou igual a um valor especificado.
Corresponde a documentos em que o valor de um campo é estritamente menor do que um valor especificado.
Corresponde aos documentos onde o valor de um campo é menor ou igual a um valor especificado.
Corresponde a documentos em que o valor de um campo está incluído em uma array de valores especificada.
Corresponde a documentos onde o valor de um campo não está incluído em uma array de valores especificada.

Exemplo

A query abaixo corresponde a documentos onde quantity é maior que zero e menor ou igual a dez.

{
"quantity": { "$gt": 0, "$lte": 10 }
}

Você pode usar um operador lógico para avaliar múltiplas expressões para um único campo.

{
"<Field Name>": {
"<Logical Operator>": [<Expression>, ...]
}
}

Os seguintes operadores lógicos estão disponíveis:

Operador lógico
Descrição
Corresponde a documentos onde o valor de um campo corresponde a todas as expressões especificadas.
Corresponde a documentos onde o valor de um campo corresponde a qualquer uma das expressões especificadas.
Corresponde a documentos onde o valor de um campo corresponde a nenhuma das expressões especificadas.
Inverte o resultado boolean da expressão lógica especificada.

Exemplo

A query a seguir corresponde a documentos em que quantity é maior que zero ou não há mais de cinco documentos na array reviews.

{
"$or": [
{ "quantity": { "$gt": 0 } },
{ "reviews": { "$size": { "$lte": 5 } } }
]
}

Você pode usar o operador de query $regex para retornar documentos com campos que correspondem a uma expressão regular. Para evitar ambiguidade com o tipo $regex de EJSON , você deve usar um objeto BSON.BSONRegExp .

{
"<Field Name>": {
"$regex": BSON.BSONRegExp(<RegEx String>, <RegEx Options>)
}
}

Exemplo

A query abaixo corresponde a documentos em que o valor name contém a sub-string ball (diferencia maiúsculas de minúsculas).

{
"name": { "$regex": BSON.BSONRegExp(".+ball", "i") }
}

Voltar

Query MongoDB Atlas