Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Handbuch hilft Ihnen beim Erstellen einer Node.js Konsolenanwendung zum Herstellen einer Verbindung mit einem Azure DocumentDB-Cluster. Sie bereiten Ihre Entwicklungsumgebung vor, verwenden das @azure/identity Paket aus dem Azure SDK für JavaScript, um sich zu authentifizieren und allgemeine Vorgänge für Dokumente in der Datenbank auszuführen.
Voraussetzungen
Ein Azure-Abonnement
- Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto
Ein vorhandener Azure DocumentDB-Cluster
- Wenn Sie keinen Cluster haben, erstellen Sie einen neuen Cluster.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter "Erste Schritte mit Azure Cloud Shell".
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, installieren Sie die Azure CLI. Wenn Sie mit Windows oder macOS arbeiten, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Um den Authentifizierungsprozess abzuschließen, führen Sie die schritte aus, die in Ihrem Terminal angezeigt werden. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI.
Wenn Sie dazu aufgefordert werden, installieren Sie die Azure CLI-Erweiterung bei der ersten Verwendung. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um auf die neueste Version zu aktualisieren.
Microsoft Entra-Authentifizierung ist für den Cluster konfiguriert, wobei Ihrer Identität die
rootRolle zugewiesen wurde.- Um die Microsoft Entra-Authentifizierung zu aktivieren, lesen Sie das Konfigurationshandbuch.
Neueste ltS-Version (Long-Term Support) von Node
- Neueste Version von TypeScript.
Konfigurieren der Konsolenanwendung
Erstellen Sie als Nächstes ein neues Konsolenanwendungsprojekt, und importieren Sie die erforderlichen Bibliotheken, um sich bei Ihrem Cluster zu authentifizieren.
Erstellen Sie ein neues Verzeichnis für Ihr Projekt, und initialisieren Sie es mit
npm init.mkdir mongodb-app cd mongodb-app npm init -yRichten Sie TypeScript in Ihrem Projekt ein.
npm install typescript ts-node @types/node --save-dev npx tsc --initErstellen Sie die TypeScript-Hauptdatei app.ts für Ihre Anwendung.
touch app.tsInstallieren Sie die Bibliothek für die
@azure/identityAuthentifizierung.npm install @azure/identityInstallieren Sie die
mongodb-Bibliothek.npm install mongodb
Herstellen einer Verbindung mit dem Cluster
Verwenden Sie nun die Azure.Identity Bibliothek, um ein TokenCredential zu erhalten, das Sie verwenden können, um sich mit Ihrem Cluster zu verbinden. Der offizielle MongoDB-Treiber verfügt über eine spezielle Schnittstelle, die implementiert werden muss, um Token von Microsoft Entra für die Verwendung beim Herstellen einer Verbindung mit dem Cluster abzurufen.
Importieren Sie die erforderlichen Module oben in der JavaScript-Datei.
import { MongoClient } from 'mongodb'; import { DefaultAzureCredential } from '@azure/identity';Erstellen Sie eine Tokenrückruffunktion, die bei Bedarf Token aus der
TokenCredentialInstanz abruft.const azureIdentityTokenCallback = async (_, credential) => { const tokenResponse = await credential.getToken(['https://ossrdbms-aad.database.windows.net/.default']); if (!tokenResponse || !tokenResponse.token) { throw new Error('Failed to retrieve a valid access token.'); } return { accessToken: tokenResponse.token, expiresInSeconds: Math.floor((tokenResponse.expiresOnTimestamp - Date.now()) / 1000), }; };Legen Sie die Clusternamenvariable fest, um eine Verbindung mit Ihrem Azure DocumentDB-Cluster herzustellen.
const clusterName = '<azure-documentdb-cluster-name>';Erstellen Sie eine instance von
DefaultAzureCredential.const credential = new DefaultAzureCredential();Erstellen Sie einen MongoDB-Client, der mit der OpenID Connect (OIDC)-Authentifizierung konfiguriert ist.
client = new MongoClient(`mongodb+srv://${clusterName}.global.mongocluster.cosmos.azure.com/`, { connectTimeoutMS: 120000, tls: true, retryWrites: true, authMechanism: 'MONGODB-OIDC', authMechanismProperties: { OIDC_CALLBACK: (params) => azureIdentityTokenCallback(params, credential), ALLOWED_HOSTS: ['*.azure.com'] } }); console.log('Client created');
Importieren Sie die erforderlichen Module oben in der TypeScript-Datei.
import { AccessToken, DefaultAzureCredential, TokenCredential } from '@azure/identity'; import { Collection, Db, Filter, FindCursor, MongoClient, OIDCCallbackParams, OIDCResponse, UpdateFilter, UpdateOptions, UpdateResult, WithId } from 'mongodb';Erstellen Sie eine Tokenrückruffunktion, die bei Bedarf Token aus der
TokenCredentialInstanz abruft.const AzureIdentityTokenCallback = async (params: OIDCCallbackParams, credential: TokenCredential): Promise<OIDCResponse> => { const tokenResponse: AccessToken | null = await credential.getToken(['https://ossrdbms-aad.database.windows.net/.default']); return { accessToken: tokenResponse?.token || '', expiresInSeconds: (tokenResponse?.expiresOnTimestamp || 0) - Math.floor(Date.now() / 1000) }; };Legen Sie die Clusternamenvariable fest, um eine Verbindung mit Ihrem Azure DocumentDB-Cluster herzustellen.
const clusterName: string = '<azure-documentdb-cluster-name>';Erstellen Sie eine instance von
DefaultAzureCredential.const credential: TokenCredential = new DefaultAzureCredential();Erstellen Sie einen MongoDB-Client, der mit der OpenID Connect (OIDC)-Authentifizierung konfiguriert ist.
const client = new MongoClient( `mongodb+srv://${clusterName}.global.mongocluster.cosmos.azure.com/`, { connectTimeoutMS: 120000, tls: true, retryWrites: true, authMechanism: 'MONGODB-OIDC', authMechanismProperties: { OIDC_CALLBACK: (params: OIDCCallbackParams) => AzureIdentityTokenCallback(params, credential), ALLOWED_HOSTS: ['*.azure.com'] } }); console.log('Client created');
Ausführen gängiger Vorgänge
Verwenden Sie schließlich die offizielle Bibliothek, um allgemeine Aufgaben mit Datenbanken, Sammlungen und Dokumenten auszuführen. Hier verwenden Sie die gleichen Klassen und Methoden, mit denen Sie mit MongoDB oder DocumentDB interagieren würden, um Ihre Sammlungen und Elemente zu verwalten.
Rufen Sie einen Verweis auf Ihre Datenbank nach Namen ab.
const databaseName = process.env.SETTINGS__DATABASENAME ?? 'cosmicworks'; console.log('Database pointer created');Rufen Sie einen Verweis auf Ihre Sammlung ab.
const collectionName = process.env.SETTINGS__COLLECTIONNAME ?? 'products'; console.log('Collection pointer created');Erstellen Sie ein Dokument mithilfe von
collection.updateOneund fügen Sie es in die Sammlung ein.const filter = { _id: request.params._id }; const payload = { $set: document }; const options = { upsert: true }; var response = await collection.updateOne(filter, payload, options); if (response.acknowledged) { console.log(`Documents upserted count:\t${response.matchedCount}`); }Verwenden Sie
collection.findOne, um ein bestimmtes Dokument aus der Sammlung abzurufen.const filter = { _id: request.params.id }; var document = await collection.findOne(filter, options); console.log(`Read document _id:\t${document._id}`);Mit
collection.findAbfragen nach mehreren Dokumenten durchführen, die einem Filter entsprechen.var filter = { category: 'gear-surf-surfboards' }; var documents = collection.find(filter); for await (const document of documents) { console.log(`Found document:\t${JSON.stringify(document)}`); }Schließen Sie die MongoDB-Clientverbindung, wenn Sie fertig sind.
await client.close();
Rufen Sie einen Verweis auf Ihre Datenbank nach Namen ab.
const database: Db = client.db('<database-name>'); console.log('Database pointer created');Rufen Sie einen Verweis auf Ihre Sammlung ab.
const collection: Collection<Product> = database.collection<Product>('<collection-name>'); console.log('Collection pointer created');Definieren Sie eine Schnittstelle, die Ihre Produktdokumente darstellt.
interface Product { _id: string; category: string; name: string; quantity: number; price: number; clearance: boolean; }Erstellen Sie ein Dokument mithilfe von
collection.updateOneund fügen Sie es in die Sammlung ein.var document: Product = { _id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', category: 'gear-surf-surfboards', name: 'Yamba Surfboard', quantity: 12, price: 850.00, clearance: false }; var query: Filter<Product> = { _id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' }; var payload: UpdateFilter<Product> = { $set: document }; var options: UpdateOptions = { upsert: true }; var response: UpdateResult<Product> = await collection.updateOne(query, payload, options); if (response.acknowledged) { console.log(`Documents upserted count:\t${response.matchedCount}`); }Verwenden Sie
collection.findOne, um ein bestimmtes Dokument aus der Sammlung abzurufen.var query: Filter<Product> = { _id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', category: 'gear-surf-surfboards' }; var response: WithId<Product> | null = await collection.findOne(query); var read_item: Product = response as Product; console.log(`Read document _id:\t${read_item._id}`);Mit
collection.findAbfragen nach mehreren Dokumenten durchführen, die einem Filter entsprechen.var query: Filter<Product> = { category: 'gear-surf-surfboards' }; var response: FindCursor<WithId<Product>> = collection.find(query); for await (const document of response) { console.log(`Found document:\t${JSON.stringify(document)}`); }Schließen Sie die MongoDB-Clientverbindung, wenn Sie fertig sind.
await client.close();