Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Learn why MongoDB was selected as a leader in the 2024 Gartner® Magic Quadrant™
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Criando um localizador de restaurantes usando Atlas, Neurelo e AWS Lambda

Anaiya Raisinghani, Guru Kamat8 min read • Published Mar 08, 2024 • Updated Apr 02, 2024
NeureloPythonAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
MongoDB Atlas e funções do Azure
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Pronto para criar um aplicativo robusto e eficiente que possa processar rapidamente dados em tempo real, capaz de se adaptar a ambientes em mudança e totalmente personalizável com integração perfeita?
A trifeta dos sonhos do desenvolvedor, MongoDB Atlas, Neurelo e AWS Lambda, impulsionará seus aplicativos baseados em nuvem de maneiras que você não sabia que eram possíveis! Com essa combinação letal, você pode criar uma grande variedade de aplicativos, como o localizador de restaurantes que criaremos neste tutorial.
Essa combinação de plataformas pode ajudar os desenvolvedores a criar funções sem servidor escaláveis, econômicas e de alto desempenho. Alguns grandes benefícios são que as funções Lambda usadas ainda permanecem sem estado — as operações de dados agora são chamadas de API sem estado e não há conexões com estado abertas a cada invocação do Lambdaquando o Nurelo é incorporado ao aplicativo. Também estamos permitindo maior desempenho e custos mais baixos, pois nenhum tempo de execução (e cobrança) é gasto na configuração ou na desmontagem de conexões estabelecidas. Isso também permite uma simultaneidade significativamente maior de invocações do Lambda, pois podemos aproveitar o pool de conexões integrado por meio do Nurelo, o que permite que você abra menos conexões em sua instância do MongoDB.
Examinaremos como configurar adequadamente a infraestrutura de integração para garantir que você esteja preparado para o sucesso e, em seguida, nos aprofundaremos na criação real de nosso aplicativo. No final, teremos um localizador de restaurantes que poderemos usar para pesquisar restaurantes que se encaixem em nossos critérios desejados. Vamos começar!

Pré-requisitos

Configurando nosso cluster do MongoDB

Nosso primeiro passo é criar um cluster MongoDB gratuito e baixar o conjunto de dados de amostra. Para obter ajuda sobre como fazer isso, consulte nosso tutorial.
Para este tutorial, usaremos a coleçãosample_restaurantsque está localizada dentro do conjunto de dados de amostra. Certifique-se de ter incluído o acesso ao endereço IP correto para este tutorial, juntamente com um nome de usuário e uma senha seguros, pois você precisará deles durante todo o processo.
Quando seu cluster estiver instalado e funcionando, podemos começar a configurar nosso projeto Neurelo.

Configurando nosso projeto Neurelo

Depois de criarmos nosso cluster MongoDB, precisamos criar um projeto em Nurelo. Para obter ajuda nesta etapa, consulte nosso primeiro tutorial desta série, Nurelo e MongoDB: Começando e Diversão Extras.
Salve sua chave API em algum lugar seguro. Caso contrário, você precisará criar uma nova chave se ela se perder. Além disso, verifique se seu projeto Neurelo está conectado ao seu cluster MongoDB. Para obter ajuda para obter uma cadeia de conexão do MongoDB, temos instruções para orientá-lo. Agora, podemos prosseguir para a configuração de nossa função AWS Lambda.

Criando nossa função do AWS Lambda

Faça login em sua conta da AWS e acesse o Lambda por meio da barra de pesquisa ou na seção “Services”. Clique no botão laranja "Create function" e certifique-se de pressionar a opção "Author from scratch" na tela que aparece. Selecione um nome para sua função — estamos usando “ConnectTest” para simplificar as coisas — e, em seguida, escolha “Python 3.12” para seu tempo de execução, já que este é um tutorial de Python! Sua função Lambda deve ter a seguinte aparência antes de pressionar "Create function. "
[figura 1: criar tela de função Lambda]
Depois de acessar a página “Function overview”, podemos começar a escrever nosso código para integrar perfeitamente o MongoDB Atlas, o Neurelo e o AWS Lambda. Vamos mergulhar nisso.

Parte 1: A integração

Felizmente, não precisamos importar nenhum requisito para este tutorial de função Lambda e podemos escrever nosso código diretamente na função que acabamos de criar.
O primeiro passo é importar os pacotes urllib3 e json com a linha:
1import urllib3, json
Esses dois pacotes contêm tudo o que precisamos para lidar com nossas connection strings e fazer com que não precisemos escrever nosso código em um IDE separado.
Depois de termos nossas importações, podemos configurar nossa chave de API para nosso ambiente Nurelo. Estamos usando um espaço reservado API_KEYe, para facilitar neste tutorial, você pode colocar sua chave diretamente nele. Mas não é uma boa prática codificar suas chaves no código e, em um ambiente de produção, isso nunca deve ser feito.
1# Put in your API Key to connect to your Neurelo environment
2NEURELO_API_KEY = ‘API_KEY’
Depois de configurar a conexão da chave da API, podemos configurar nossos cabeçalhos para a chamada à REST API. Para isso, podemos usar a funçãolambda_functiongerada automaticamente e editá-la para atender melhor às nossas necessidades:
1def lambda_handler(event, context):
2
3 # Setup the headers
4 headers = {
5 'X-API-KEY': NEURELO_API_KEY
6 }
7
8 # Creating a PoolManager instance for sending HTTP requests
9 http = urllib3.PoolManager()
Aqui, estamos criando um dicionário chamado headers para definir o valor de nossa chave de API. Esta etapa é necessária para que Nurelo possa autenticar nossa solicitação de API e possamos retornar nossos documentos necessários. Em seguida, estamos utilizando a classePoolManager para gerenciar nossas conexões de servidor. Essa é uma maneira eficiente de garantir que estamos reutilizando conexões com o Lambda em vez de criar uma nova conexão com cada chamada individual. Para este tutorial, estamos usando apenas uma conexão, mas se você tiver um Lambda mais complexo ou um projeto com a necessidade de várias conexões, poderá ver um pouco mais da classePoolManager .
Agora, estamos prontos para configurar nossa primeira chamada de API! Lembre-se de que, nesta primeira etapa, estamos nos conectando à nossa coleção "restaurants " dentro do nosso banco de dadossample_restaurants e estamos devolvendo nossos documentos necessários.
Decidimos que queremos recuperar uma lista de restaurantes desta coleção que se atendam a critérios específicos: Esses restaurantes estão localizados no bairro de Brooklyn, em Nova York, e servem comida típica da América. Antes de escrever o código abaixo, sugerimos que você pare um segundo para examinar o banco de dados de exemplo para visualizar os campos dentro de nossos documentos.
Então, agora que definimos os parâmetros de consulta nos quais estamos interessados, vamos traduzi-los em uma solicitação de consulta. Vamos usar três parâmetros para nossa consulta: "filter," "take," e "select." Estas são as mesmas chaves de parâmetro do nosso primeiro artigo desta série, portanto, consulte-as se precisar de ajuda. Estamos usando o parâmetro "filter" para garantir que estamos recebendo restaurantes que se encaixam em nossos critérios de estar no Brooklyn e que são americanos, o parâmetro "take" é para que retornemos apenas cinco documentos em vez de milhares (nossa coleção tem mais de 25,000 documentos!), e o parâmetro "select" é para que apenas nossos campos específicos sejam retornados em nossa saída.
Nossa solicitação de consulta ficará assim:
1# Define the query parameters
2 params1 = {
3 'filter': '{"AND": {"borough": {"equals": "Brooklyn"}, "cuisine": {"equals": "American"}}}',
4 'take': '5',
5 'select': '{"id": false, "name": true, "borough": true, "cuisine": true}',
6 }
Não se lembre de enviar uma solicitação GET com os parâmetros necessários e configurar algumas declarações de impressão para que possamos ver se nossa solicitação foi bem-sucedida. Depois de concluído, todo o bloco de código para nossa Parte 1 deve ser semelhante a este:
1import urllib3, json
2
3# Configure the API Key for our Neurelo environment
4NEURELO_API_KEY = 'API_KEY'
5
6def lambda_handler(event, context):
7
8 # Setup the headers
9 headers = {
10 'X-API-KEY': NEURELO_API_KEY
11 }
12
13 # Creating a PoolManager instance for sending HTTP requests
14 http = urllib3.PoolManager()
15
16 # Choose the "restaurants" collection from our Neurelo environment connected to 'sample_restaurants'
17 api1 = 'https://us-east-2.aws.neurelo.com/rest/restaurants'
18
19 # Define the query parameters
20 params1 = {
21 'filter': '{"AND": {"borough": {"equals": "Brooklyn"}, "cuisine": {"equals": "American"}}}',
22 'take': '5',
23 'select': '{"id": false, "name": true, "borough": true, "cuisine": true}',
24 }
25
26 # Send a GET request with URL parameters
27 response = http.request("GET", api1, headers=headers, fields=params1)
28
29 # Print results if the request was successful
30 if response.status == 200:
31 # Print the JSON content of the response
32 print ('Restaurants Endpoint: ' + json.dumps(json.loads(response.data), indent=4))
E nossa saída ficará assim: [fig 2: resultados após chamar nossa primeira chamada de API]
Parabéns! Como você pode ver, devolvemos com sucesso cinco restaurantes de culinária americana localizados no Brooklyn e integramos com sucesso nosso cluster MongoDB ao nosso projeto Neurelo e usamos o AWS Lambda para acessar nossos dados.
Agora que configuramos tudo, vamos para a segunda parte do nosso tutorial, onde filtraremos nossos resultados com um endpoint de API personalizado para os melhores restaurantes possíveis.

Parte 2: Filtrando ainda mais nossos resultados com um endpoint de API personalizado

Antes de podermos chamar nosso endpoint personalizado para filtrar os resultados desejados, precisamos criar um. Embora o Neurelo tenha uma grande lista de endpoints gerados automaticamente disponíveis para seu projeto, às vezes precisamos de um endpoint que possamos personalizar com uma query complexa para retornar informações detalhadas. No banco de dados de amostra em nosso cluster, podemos ver que há um campogrades onde existem a nota e a pontuação recebidas por cada restaurante.
[Fig 3: visualização das notas e pontuações em nossos documentos]
Então, e se quisermos devolver documentos com base em suas pontuações? Digamos que queremos expandir nossa Atlas Search e encontrar restaurantes que são realmente bons restaurantes.
Go até Nurelo e acesse a aba "Definitions " no lado esquerdo da tela. Go para a guia "Custom Queries " e crie uma query complexa chamada "getGoodRestaurants. " Para obter mais ajuda sobre esta seção, consulte o primeiro artigo desta série para obter uma explicação mais detalhada.
Queremos filtrar restaurantes em que as notas mais recentes sejam "A " ou "B, " e a pontuação da nota mais recente seja maior que 10. Em seguida, queremos agregar os restaurantes por cozinha e bairro e listar o nome do restaurante, para que possamos saber onde ir!
Nossa consulta personalizada ficará assim:
1{
2 "aggregate": "restaurants",
3 "pipeline": [
4 {
5 "$match": {
6 "borough": "Brooklyn",
7 "cuisine": "American",
8 "grades.0.grade": {
9 "$in": [
10 "A",
11 "B"
12 ]
13 },
14 "grades.1.grade": {
15 "$in": [
16 "A",
17 "B"
18 ]
19 },
20 "grades.0.score": {
21 "$gt": 10
22 }
23 }
24 },
25 {
26 "$limit": 5
27 },
28 {
29 "$group": {
30 "_id": {
31 "cuisine": "$cuisine",
32 "borough": "$borough"
33 },
34 "restaurants_info": {
35 "$push": {
36 "name": "$name"
37}
38 }
39 }
40 }
41 ],
42 "cursor": {}
43}
Ótimo! Agora que nossa consulta personalizada está pronta, clique no botão “Commit” na parte superior da tela, adicione uma mensagem de confirmação e verifique se a opção “Deploy to environment” está selecionada. Essa é uma etapa crucial que garantirá que estamos confirmando nossa consulta personalizada no repositório de definições do projeto e implantando as mudanças em nosso ambiente.
Agora, podemos voltar ao Lambda e incorporar nosso segundo endpoint para retornar restaurantes com pontuações altas que servem a comida desejada no local desejado.
Adicione este código ao final do código anterior que escrevemos.
1# Choose the custom-query endpoint from our Neurelo environment connected to 'sample_restaurants'
2 api2 = 'https://us-east-2.aws.neurelo.com/custom/getGoodRestaurants'
3
4 # Send a GET request with URL parameters
5 response = http.request("GET", api2, headers=headers)
6
7 if response.status == 200:
8 # Print the JSON content of the response
9 print ('Custom Query Endpoint: ' + json.dumps(json.loads(response.data), indent=4))
Aqui, estamos escolhendo nosso endpoint personalizado, getGoodRestaurants, e, em seguida, enviando uma solicitação GET para adquirir as informações necessárias.
Implemente as alterações no Lambda e clique no botão "Test ".
Sua saída ficará assim: [fig 4: saída de endpoint de query complexa personalizada no Lambda]
Como você pode ver nos resultados acima, recebemos uma amostra de cinco restaurantes de culinária americana no bairro do Brooklyn que atendem aos nossos critérios e são considerados bons restaurantes!

Conclusão

Neste tutorial, abordamos como integrar adequadamente um MongoDB Atlas cluster com nosso projeto Neurelo e retornar os resultados desejados usando o AWS Lambda. Mostramos todo o processo de utilização de nossos endpoints de API automatizados do projeto Neurelo e até mesmo como usar endpoints exclusivos e totalmente personalizáveis!
Para obter mais ajuda com o uso do MongoDB Atlas, Nureloe AWS Lambda, acesse a documentação com link específico.
Este tutorial é o segundo de nossa série. Confira o primeiro tutorial: Neurelo e MongoDB: Começando e Diversão Extras.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Usando o driver Node.js MongoDB com AWS Lambda


Jan 23, 2024 | 5 min read
Tutorial

Criar um backend de gerenciamento de mídia escalável: integrando Node.js, Armazenamento de blobs Azure e MongoDB


Nov 05, 2024 | 10 min read
Tutorial

Como implementar memória de trabalho em AI agentes de IA e sistemas de Agente para aplicativos de IA em tempo AI real


Nov 18, 2024 | 13 min read
Artigo

Descubra a estrutura semântica latente com o cluster vetorial


Oct 11, 2024 | 10 min read
Sumário