Rychlý start: Ovladač Služby Azure Cosmos DB pro MongoDB pro Node.js

PLATÍ PRO: MongoDB

Začněte s balíčkem npm MongoDB a vytvářejte databáze, kolekce a dokumenty v rámci prostředku služby Azure Cosmos DB. Pomocí těchto kroků nainstalujte balíček a vyzkoušejte si ukázkový kód pro základní úlohy.

Poznámka:

Ukázkové fragmenty kódu jsou k dispozici na GitHubu jako projekt JavaScriptu.

Referenční dokumentace k rozhraní API pro MongoDB Package (NuGet) s referenční dokumentací | k rozhraní API pro MongoDB / Microsoft.Azure.Cosmos) | Azure Developer CLI

Požadavky

Nastavení

Nasaďte vývojový kontejner tohoto projektu do svého prostředí. Pak pomocí Azure Developer CLI (azd) vytvořte účet služby Azure Cosmos DB pro MongoDB a nasaďte kontejnerizovanou ukázkovou aplikaci. Ukázková aplikace používá klientskou knihovnu ke správě, vytváření, čtení a dotazování ukázkových dat.

Otevřít v GitHub Codespaces

Otevřít v vývojovém kontejneru

Důležité

Účty GitHubu zahrnují nárok na úložiště a hodiny jádra bez poplatků. Další informace najdete v zahrnutých hodinách úložiště a jader pro účty GitHubu.

  1. Otevřete terminál v kořenovém adresáři projektu.

  2. Ověřte se v Rozhraní příkazového řádku Azure Developer CLI pomocí azd auth loginrozhraní příkazového řádku . Postupujte podle kroků určených nástrojem k ověření v rozhraní příkazového řádku pomocí vašich upřednostňovaných přihlašovacích údajů Azure.

    azd auth login
    
  3. Slouží azd init k inicializaci projektu.

    azd init
    
  4. Během inicializace nakonfigurujte jedinečný název prostředí.

    Tip

    Název prostředí se také použije jako název cílové skupiny prostředků. Pro účely tohoto rychlého startu zvažte použití .msdocs-cosmos-db-

  5. Nasaďte účet služby Azure Cosmos DB pomocí azd up. Šablony Bicep také nasazují ukázkovou webovou aplikaci.

    azd up
    
  6. Během procesu zřizování vyberte své předplatné a požadované umístění. Počkejte na dokončení procesu zřizování. Proces může trvat přibližně pět minut.

  7. Po dokončení zřizování prostředků Azure se do výstupu zahrne adresa URL spuštěné webové aplikace.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Pomocí adresy URL v konzole přejděte do webové aplikace v prohlížeči. Sledujte výstup spuštěné aplikace.

    Snímek obrazovky se spuštěnou webovou aplikací


Nainstalujte balíček .

Přidejte balíček npm MongoDB do projektu JavaScriptu. npm install package Použijte příkaz určující název balíčku npm. Balíček dotenv se používá ke čtení proměnných prostředí ze .env souboru během místního vývoje.

npm install mongodb dotenv

Objektový model

Než začnete vytvářet aplikaci, podívejme se na hierarchii prostředků ve službě Azure Cosmos DB. Azure Cosmos DB má konkrétní objektový model, který se používá k vytváření a přístupu k prostředkům. Azure Cosmos DB vytváří prostředky v hierarchii, které se skládají z účtů, databází, kolekcí a dokumentů.

Diagram hierarchie služby Azure Cosmos DB, včetně účtů, databází, kolekcí a dokumentů

Hierarchický diagram znázorňující účet služby Azure Cosmos DB v horní části Účet má dva podřízené horizontální oddíly databáze. Jeden z horizontálních oddílů databáze zahrnuje dvě podřízené horizontální oddíly kolekce. Druhý horizontální oddíl databáze zahrnuje jeden podřízený uzel kolekce. Tento horizontální oddíl jedné kolekce má tři podřízené horizontální oddíly dokumentace.

K interakci s těmito prostředky použijete následující třídy MongoDB:

  • MongoClient – Tato třída poskytuje logickou reprezentaci na straně klienta pro vrstvu rozhraní API pro MongoDB ve službě Azure Cosmos DB. Objekt klienta slouží ke konfiguraci a spouštění požadavků na službu.
  • Db – Tato třída je odkazem na databázi, která může nebo nemusí existovat ve službě ještě. Databáze je ověřena na straně serveru, když se pokusíte o přístup k databázi nebo provedete operaci s ní.
  • Collection – Tato třída je odkazem na kolekci, která ještě nemusí ve službě existovat. Kolekce se ověří na straně serveru, když se s ní pokusíte pracovat.

Příklady kódu

Vzorový kód popsaný v tomto článku vytvoří databázi s názvem adventureworks kolekce s názvem products. Kolekce products je navržená tak, aby obsahovala podrobnosti o produktu, jako je název, kategorie, množství a indikátor prodeje. Každý produkt obsahuje také jedinečný identifikátor.

Pro účely tohoto postupu nebude databáze používat horizontální dělení.

Ověření klienta

  1. V adresáři projektu vytvořte soubor index.js . V editoru přidejte příkazy, které odkazují na balíčky MongoDB a DotEnv npm.

    // Read .env file and set environment variables
    require('dotenv').config();
    const random = Math.floor(Math.random() * 100);
    
    // Use official mongodb driver to connect to the server
    const { MongoClient, ObjectId } = require('mongodb');
    
  2. Definujte novou instanci MongoClient, třídy pomocí konstruktoru a process.env. pro čtení proměnné prostředí, kterou jste vytvořili dříve.

    // New instance of MongoClient with connection string
    // for Cosmos DB
    const url = process.env.COSMOS_CONNECTION_STRING;
    const client = new MongoClient(url);
    

Další informace o různých způsobech vytvoření MongoClient instance naleznete v tématu Rychlý start ovladače MongoDB NodeJS.

Nastavení asynchronních operací

index.js Do souboru přidejte následující kód, který podporuje asynchronní operace:

async function main(){

// The remaining operations are added here
// in the main function

}

main()
  .then(console.log)
  .catch(console.error)
  .finally(() => client.close());

Následující fragmenty kódu by se měly přidat do hlavní funkce, aby bylo možné zpracovat syntaxi async/await.

Připojte se k databázi.

Použijte metodu MongoClient.connect pro připojení k prostředku Azure Cosmos DB for MongoDB. Metoda connect vrátí odkaz na databázi.

// Use connect method to connect to the server
await client.connect();

Získání instance databáze

MongoClient.db Použijte odkaz na databázi.

// Database reference with creation if it does not already exist
const db = client.db(`adventureworks`);
console.log(`New database:\t${db.databaseName}\n`);

Získání instance kolekce

Získá MongoClient.Db.collection odkaz na kolekci.

// Collection reference with creation if it does not already exist
const collection = db.collection('products');
console.log(`New collection:\t${collection.collectionName}\n`);

Zřetězených instancí

Klienta, databázi a kolekci můžete zřetězovat dohromady. Řetězení je pohodlnější, pokud potřebujete získat přístup k více databázím nebo kolekcím.

const db = await client.db(`adventureworks`).collection('products').updateOne(query, update, options)

Vytvoření indexu

Collection.createIndex Použijte k vytvoření indexu vlastností dokumentu, které chcete použít k řazení pomocí metody MongoDBFindCursor.sort.

// create index to sort by name
const indexResult = await collection.createIndex({ name: 1 });
console.log(`indexResult: ${JSON.stringify(indexResult)}\n`);

Vytvoření dokumentu

Vytvořte dokument s vlastnostmi produktu pro adventureworks databázi:

  • Vlastnost _id pro jedinečný identifikátor produktu.
  • Vlastnost kategorie. Tuto vlastnost lze použít jako klíč logického oddílu.
  • Vlastnost name .
  • Vlastnost skladového množství .
  • Nemovitost prodeje označující, zda je produkt v prodeji.
// Create new doc and upsert (create or replace) to collection
const product = {
    category: "gear-surf-surfboards",
    name: `Yamba Surfboard-${random}`,
    quantity: 12,
    sale: false
};
const query = { name: product.name};
const update = { $set: product };
const options = {upsert: true, new: true};

// Insert via upsert (create or replace) doc to collection directly
const upsertResult1 = await collection.updateOne(query, update, options);
console.log(`upsertResult1: ${JSON.stringify(upsertResult1)}\n`);

// Update via upsert on chained instance
const query2 = { _id: ObjectId(upsertResult1.upsertedId) };
const update2 = { $set: { quantity: 20 } };
const upsertResult2 = await client.db(`adventureworks`).collection('products').updateOne(query2, update2, options);
console.log(`upsertResult2: ${JSON.stringify(upsertResult2)}\n`);

Vytvořte v kolekci dokument voláním Collection.UpdateOne. V tomto příkladu jsme se rozhodli místovytvoření nového dokumentu vytvořit nový dokument pro případ, že tento ukázkový kód spustíte více než jednou.

Získání dokumentu

Ve službě Azure Cosmos DB můžete provést levnější operaci čtení bodů pomocí jedinečného identifikátoru (_id) i klíče oddílu (category).

// Point read doc from collection:
// - without sharding, should use {_id}
// - with sharding,    should use {_id, partitionKey }, ex: {_id, category}
const foundProduct = await collection.findOne({
    _id: ObjectId(upsertResult1.upsertedId), 
    category: "gear-surf-surfboards"
});
console.log(`foundProduct: ${JSON.stringify(foundProduct)}\n`);

Dotazování na dokumenty

Po vložení dokumentu můžete spustit dotaz, abyste získali všechny dokumenty, které odpovídají určitému filtru. Tento příklad najde všechny dokumenty, které odpovídají určité kategorii: gear-surf-surfboards. Jakmile je dotaz definovaný, voláním Collection.find získáte FindCursor výsledek. Převeďte kurzor na pole tak, aby používaly javascriptové metody pole.

// select all from product category
const allProductsQuery = { 
    category: "gear-surf-surfboards" 
};

// get all documents, sorted by name, convert cursor into array
const products = await collection.find(allProductsQuery).sort({name:1}).toArray();
products.map((product, i ) => console.log(`${++i} ${JSON.stringify(product)}`));

Řešení potíží:

  • Pokud se zobrazí například chyba The index path corresponding to the specified order-by item is excluded., ujistěte se, že jste vytvořili index.

Spuštění kódu

Tato aplikace vytvoří rozhraní API pro databázi a kolekci MongoDB a vytvoří dokument a pak přečte přesně stejný dokument. Příklad nakonec vydá dotaz, který by měl vrátit jenom tento jediný dokument. V každém kroku příklad vypíše informace do konzoly o krocích, které provedl.

Pokud chcete aplikaci spustit, přejděte pomocí terminálu do adresáře aplikace a spusťte aplikaci.

node index.js

Výstup aplikace by měl být podobný tomuto příkladu:

New database:   adventureworks

New collection: products

upsertResult1: {"acknowledged":true,"modifiedCount":0,"upsertedId":"62b1f492ff69395b30a03169","upsertedCount":1,"matchedCount":0}

upsertResult2: {"acknowledged":true,"modifiedCount":1,"upsertedId":null,"upsertedCount":0,"matchedCount":1}

foundProduct: {"_id":"62b1f492ff69395b30a03169","name":"Yamba Surfboard-93","category":"gear-surf-surfboards","quantity":20,"sale":false}

indexResult: "name_1"

1 {"_id":"62b1f47dacbf04e86c8abf25","name":"Yamba Surfboard-11","category":"gear-surf-surfboards","quantity":20,"sale":false}
done

Vyčištění prostředků

Pokud už účet Azure Cosmos DB pro MongoDB nepotřebujete, můžete odstranit odpovídající skupinu prostředků.

az group delete Pomocí příkazu odstraňte skupinu prostředků.

az group delete --name $resourceGroupName

Další kroky

V tomto rychlém startu jste zjistili, jak vytvořit účet služby Azure Cosmos DB pro MongoDB, vytvořit databázi a vytvořit kolekci pomocí ovladače MongoDB. Teď se můžete hlouběji ponořit do služby Azure Cosmos DB pro MongoDB a importovat další data, provádět složité dotazy a spravovat prostředky MongoDB služby Azure Cosmos DB.