Converter procedimentos armazenados
Você pode importar e converter seus procedimentos armazenados SQL em código MongoDB com o conversor de query. O conversor de query considera as regras de mapeamento e as transformações de esquema definidas em seu projeto ao converter seu código SQL.
Sobre esta tarefa
O conversor de query usa tecnologia de AI que pode não ser capaz de converter query, triggers ou procedimentos armazenados longos ou complexos. Algumas queries podem não ser convertidas corretamente, enquanto outras podem não ser convertidas.
O conversor de query utiliza o esquema relacional, o esquema MongoDB e as regras de mapeamento em seu projeto atual para determinar como as queries devem ser convertidas. As conversões podem falhar ou estar incorretas se as queries fizerem referência a tabelas que não estão em seu esquema relacional ou se não estiverem mapeadas para as coleções do MongoDB.
Query, Atlas Triggers, visualizações e procedimentos armazenados convertidos são salvos em seu projeto e persistem por meio da importação e exportação do projeto.
As queries SQL estão limitadas a 40,000 caracteres de texto.
Você pode visualizar o histórico de conversões anteriores no painel Query Converter à esquerda. Cada conversão tem um ícone indicando o resultado da conversão. Se um objeto não tiver um ícone próximo a ele, ainda não foi tentada uma conversão:
IconDescriçãoControle giratórioA conversão agora está sendo executada.Marca de verificação verdeA conversão foi bem-sucedida.Ponto de interrogação vermelhoA conversão falhou na última tentativa.
Antes de começar
O MongoDB não tem um tipo de objeto de sinônimo oficial para o procedimento armazenado SQL. Em vez disso, o MongoDB oferece suporte a JavaScript personalizado e código de driver que hospeda a lógica do banco de dados de dados. Parte da modernização do seu aplicação é escolher a linguagem de programação e a opção de hospedagem que melhor atenda às necessidades do seu aplicação . Você pode hospedar seu código de procedimento armazenado convertido em seu aplicação ou com funções do MongoDB App Services.
Sempre revise e teste o código gerado pelo conversor de query antes de implementá-lo em um ambiente de produção.
Passos
Conectar-se ao seu relational database
Especifique os detalhes da conexão com seu reconhecimento de data center de origem.
Para obter detalhes, consulte Connection Strings do Banco de Dados Relacional.
Clique em Connect.
Selecionar procedimentos armazenados
No modal Import Database Objects , clique em ao lado de Database.
Clique em ao lado do esquema.
Clique em ícone ao lado de Stored Procedures.
Dica
Para alternar procedimentos armazenados para conversão, clique em ícone ao lado do nome do procedimento armazenado.
Clique em Save.
O código de cada procedimento armazenado no reconhecimento de data center do seu projeto é importado para o seu projeto e está visível no painel Query Converter , em Stored Procedures.
Converter e testar código
Clique no nome de um procedimento armazenado no painel esquerdo em Stored Procedures.
O código é exibido no painel Imported Stored Procedure .
Selecione Target Language no menu suspenso.
O conversor de Query suporta conversões de procedimento armazenado para JavaScript, C# e Java.
Clique no botão Convert . Aguarde o conversor de query converter seu código.
O código MongoDB convertido é exibido no painel Converted MongoDB Query .
Se o conversor de consultas tiver erros, você poderá ver os detalhes no painel Converted MongoDB Query.
Clique em no painel Converted MongoDB Query para copiar o código do MongoDB para a área de transferência.
Teste e valide o código MongoDB gerado.
Dica
Você pode usar a caixa de texto Filter para filtrar query, procedimentos armazenados, Atlas Triggers e visualizações com base no nome do objeto e na sintaxe SQL.
Exemplos
O conversor de query pode converter seus procedimentos armazenados em código Javascript, C# ou Java. Os exemplos abaixo mostram conversões para cada idioma.
JavaScript
O exemplo a seguir mostra um procedimento armazenado do MySQL convertido em JavaScript:
BEGIN DECLARE v_rentals INT; DECLARE v_out INT; SELECT COUNT(*) INTO v_rentals FROM rental WHERE inventory_id = p_inventory_id; IF v_rentals = 0 THEN RETURN TRUE; END IF; SELECT COUNT(rental_id) INTO v_out FROM inventory LEFT JOIN rental USING(inventory_id) WHERE inventory.inventory_id = p_inventory_id AND rental.return_date IS NULL; IF v_out > 0 THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END
async function query(db, p_inventory_id) { const v_rentals = await db.collection('rental').countDocuments( { inventoryId: p_inventory_id } ); if (v_rentals === 0) { return true; } const v_out = await db.collection('inventory').aggregate([ { $lookup: { from: 'rental', localField: 'inventoryId', foreignField: 'inventoryId', as: 'rentalData' } }, { $match: { inventoryId: p_inventory_id, 'rentalData.returnDate': { $exists: false } } }, { $count: 'rentalId' } ]).toArray(); if (v_out.length > 0 && v_out[0].rentalId > 0) { return false; } else { return true; } }
C#
O exemplo a seguir mostra um procedimento armazenado MySQL convertido para C#:
BEGIN DECLARE v_customer_id INT; DECLARE EXIT HANDLER FOR NOT FOUND RETURN NULL; SELECT customer_id INTO v_customer_id FROM rental WHERE return_date IS NULL AND inventory_id = p_inventory_id; RETURN v_customer_id; END
async Task<int?> Query(IMongoDatabase db) { var rentalCollection = db.GetCollection<BsonDocument>("rental"); var filter = Builders<BsonDocument>.Filter.Eq("inventoryId", p_inventory_id) & Builders<BsonDocument>.Filter.Eq("returnDate", null); var result = await rentalCollection.Find(filter).FirstOrDefaultAsync(); return result != null ? result["customerId"].AsInt32 : (int?)null; }
Java
O exemplo a seguir mostra um procedimento armazenado do MySQL convertido em Java:
BEGIN SELECT inventory_id FROM inventory WHERE film_id = p_film_id AND store_id = p_store_id AND NOT inventory_in_stock(inventory_id); SELECT COUNT(*) FROM inventory WHERE film_id = p_film_id AND store_id = p_store_id AND NOT inventory_in_stock(inventory_id) INTO p_film_count; END
void query(MongoDatabase db) { int p_film_id = 0; int p_store_id = 0; int p_film_count = 0; MongoCollection<Document> inventoryCollection = db.getCollection("inventory"); Bson filter = Filters.and(Filters.eq("filmId", p_film_id), Filters.eq("storeId", p_store_id), Filters.not(inventory_in_stock("inventoryId"))); FindIterable<Document> result = inventoryCollection.find(filter); for (Document doc : result) { System.out.println(doc.getInteger("inventoryId")); } p_film_count = (int) inventoryCollection.countDocuments(filter); }