Rövid útmutató: A MongoDB-hez készült Azure Cosmos DB Pythonhoz MongoDB-illesztőprogrammal
A KÖVETKEZŐKRE VONATKOZIK: MongoDB
Ismerkedjen meg a MongoDB-vel, hogy adatbázisokat, gyűjteményeket és dokumentumokat hozzon létre az Azure Cosmos DB-erőforrásban. Az alábbi lépéseket követve üzembe helyezhet egy minimális megoldást a környezetében az Azure Developer CLI használatával.
A MongoDB-hez készült API referenciadokumentációja– Pymongo-csomag | – Azure Developer CLI |
Előfeltételek
- Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.
- GitHub-fiók
- Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.
- Azure Developer CLI
- Docker Desktop
Beállítás
Helyezze üzembe a projekt fejlesztési tárolóját a környezetében. Ezután az Azure Developer CLI (azd
) használatával hozzon létre egy Azure Cosmos DB-fiókot MongoDB-fiókhoz, és helyezzen üzembe egy tárolóalapú mintaalkalmazást. A mintaalkalmazás az ügyfélkódtárat használja a mintaadatok kezelésére, létrehozására, olvasására és lekérdezésére.
Fontos
A GitHub-fiókok magukban foglalják a tárterületre és az alapórákra való jogosultságot díjmentesen. További információkért tekintse meg a GitHub-fiókokhoz tartozó tárterületet és alapórákat.
Nyisson meg egy terminált a projekt gyökérkönyvtárában.
Hitelesítés az Azure Developer CLI-vel
azd auth login
a . Kövesse az eszköz által megadott lépéseket a parancssori felületre való hitelesítéshez az ön által előnyben részesített Azure-hitelesítő adatokkal.azd auth login
A projekt inicializálására használható
azd init
.azd init --template cosmos-db-mongodb-python-quickstart
Feljegyzés
Ez a rövid útmutató az azure-samples/cosmos-db-mongodb-python-quickstart sablon GitHub-adattárat használja. Az Azure Developer CLI automatikusan klónozza ezt a projektet a gépére, ha még nincs ott.
Az inicializálás során konfiguráljon egy egyedi környezetnevet.
Tipp.
A rendszer a környezet nevét is használja a célerőforráscsoport neveként. Ebben a rövid útmutatóban fontolja meg a használatát
msdocs-cosmos-db
.Az Azure Cosmos DB-fiók üzembe helyezése a következő használatával
azd up
: . A Bicep-sablonok egy minta webalkalmazást is üzembe helyeznek.azd up
A kiépítési folyamat során válassza ki az előfizetést és a kívánt helyet. Várja meg, amíg a kiépítési folyamat befejeződik. A folyamat körülbelül öt percet vehet igénybe.
Az Azure-erőforrások kiépítése után a kimenet tartalmazza a futó webalkalmazás URL-címét.
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.
A konzol URL-címével keresse meg a webalkalmazást a böngészőben. Figyelje meg a futó alkalmazás kimenetét.
Telepítse az ügyfélkódtárat
Hozzon létre egy
requirements.txt
fájlt az alkalmazáskönyvtárban, amely felsorolja a PyMongo- és python-dotenv-csomagokat.# requirements.txt pymongo python-dotenv
Hozzon létre egy virtuális környezetet, és telepítse a csomagokat.
# py -3 uses the global python interpreter. You can also use python3 -m venv .venv. py -3 -m venv .venv source .venv/Scripts/activate pip install -r requirements.txt
Objektummodell
Tekintsük át a MongoDB API-ban található erőforrások hierarchiáját és az erőforrások létrehozásához és eléréséhez használt objektummodellt. Az Azure Cosmos DB olyan hierarchiában hoz létre erőforrásokat, amelyek fiókokból, adatbázisokból, gyűjteményekből és dokumentumokból állnak.
Hierarchikus diagram egy Azure Cosmos DB-fiókot ábrázol felül. A fiók két gyermekadatbázis-szegmensből áll. Az adatbázis-szegmensek egyike két gyermekgyűjteményi szegmenst tartalmaz. A másik adatbázis-szegmens egyetlen gyermekgyűjteményi szegmenst tartalmaz. Az egyetlen gyűjtemény szegmense három gyermek-dokumentum-szegmensből áll.
Minden erőforrástípust egy Python-osztály jelöl. Íme a leggyakoribb osztályok:
MongoClient – A PyMongo használatakor az első lépés egy MongoClient létrehozása az Azure Cosmos DB MongoDB-hez készült API-jához való csatlakozáshoz. Az ügyfélobjektum a szolgáltatással kapcsolatos kérések konfigurálására és végrehajtására szolgál.
Adatbázis – Az Azure Cosmos DB Api for MongoDB egy vagy több független adatbázist támogat.
Gyűjtemény – Egy adatbázis egy vagy több gyűjteményt tartalmazhat. A gyűjtemény a MongoDB-ben tárolt dokumentumok csoportja, és nagyjából egyenértékűnek tekinthető egy relációs adatbázisban lévő táblázattal.
Dokumentum – A dokumentum kulcs-érték párok készlete. A dokumentumok dinamikus sémával rendelkeznek. A dinamikus séma azt jelenti, hogy az ugyanabban a gyűjteményben lévő dokumentumoknak nem kell ugyanazokkal a mezőkkel vagy szerkezettel rendelkezniük. A gyűjtemény dokumentumainak gyakori mezői pedig különböző típusú adatokat tartalmazhatnak.
Az entitások hierarchiájáról további információt az Azure Cosmos DB erőforrásmodell-cikkében talál.
Kódpéldák
- Az ügyfél hitelesítése
- Adatbázis lekérése
- Gyűjtemény lekérése
- Index létrehozása
- Dokumentum létrehozása
- Dokumentum lekérése
- Dokumentumok lekérdezése
A cikkben ismertetett mintakód létrehoz egy adatbázist, amelynek neve adventureworks
products
egy . A products
gyűjtemény olyan termékadatokat tartalmaz, mint a név, a kategória, a mennyiség és az értékesítési mutató. Minden termék egyedi azonosítót is tartalmaz. A teljes mintakód a következő helyen https://github.com/Azure-Samples/azure-cosmos-db-mongodb-python-getting-started/tree/main/001-quickstart/található: .
Az alábbi lépéseknél az adatbázis nem fog horizontális skálázást használni, és egy szinkron alkalmazást jelenít meg a PyMongo-illesztőprogram használatával. Aszinkron alkalmazásokhoz használja a motorillesztőt.
Az ügyfél hitelesítése
A projektkönyvtárban hozzon létre egy run.py fájlt. A szerkesztőben adjon meg kötelező utasításokat a használni kívánt csomagokra való hivatkozáshoz, beleértve a PyMongo és a Python-dotenv csomagokat is.
import os import sys from random import randint import pymongo from dotenv import load_dotenv
Kérje le a kapcsolati adatokat egy .env fájlban definiált környezeti változóból.
load_dotenv() CONNECTION_STRING = os.environ.get("COSMOS_CONNECTION_STRING")
Határozza meg a kódban használni kívánt állandókat.
DB_NAME = "adventureworks" COLLECTION_NAME = "products"
Csatlakozás az Azure Cosmos DB MongoDB-hez készült API-jához
A MongoClient objektum használatával csatlakozzon a MongoDB-hez készült Azure Cosmos DB-erőforráshoz. A kapcsolódási módszer az adatbázisra mutató hivatkozást ad vissza.
client = pymongo.MongoClient(CONNECTION_STRING)
Adatbázis lekérése
Ellenőrizze, hogy az adatbázis létezik-e list_database_names metódussal. Ha az adatbázis nem létezik, az adatbázisbővítmény létrehozása paranccsal hozza létre egy megadott kiosztott átviteli sebességgel.
# Create database if it doesn't exist
db = client[DB_NAME]
if DB_NAME not in client.list_database_names():
# Create a database with 400 RU throughput that can be shared across
# the DB's collections
db.command({"customAction": "CreateDatabase", "offerThroughput": 400})
print("Created db '{}' with shared throughput.\n".format(DB_NAME))
else:
print("Using database: '{}'.\n".format(DB_NAME))
Gyűjtemény lekérése
Ellenőrizze, hogy a gyűjtemény létezik-e a list_collection_names metódussal. Ha a gyűjtemény nem létezik, a gyűjteménybővítmény létrehozása paranccsal hozza létre.
# Create collection if it doesn't exist
collection = db[COLLECTION_NAME]
if COLLECTION_NAME not in db.list_collection_names():
# Creates a unsharded collection that uses the DBs shared throughput
db.command(
{"customAction": "CreateCollection", "collection": COLLECTION_NAME}
)
print("Created collection '{}'.\n".format(COLLECTION_NAME))
else:
print("Using collection: '{}'.\n".format(COLLECTION_NAME))
Index létrehozása
Hozzon létre egy indexet a frissítésgyűjtemény bővítmény parancsával. Az indexet a gyűjteménybővítmény létrehozása parancsban is beállíthatja. Állítsa be az index tulajdonságát name
ebben a példában, hogy később a kurzorosztály rendezési módszerével rendezhesse a termék nevét.
indexes = [
{"key": {"_id": 1}, "name": "_id_1"},
{"key": {"name": 2}, "name": "_id_2"},
]
db.command(
{
"customAction": "UpdateCollection",
"collection": COLLECTION_NAME,
"indexes": indexes,
}
)
print("Indexes are: {}\n".format(sorted(collection.index_information())))
Dokumentum létrehozása
Hozzon létre egy dokumentumot az adatbázis terméktulajdonságaivaladventureworks
:
- Kategóriatulajdonság. Ez a tulajdonság használható logikai partíciókulcsként.
- Névtulajdonság.
- Készletmennyiség tulajdonság.
- Eladó ingatlan, amely jelzi, hogy a termék eladásra kerül-e.
"""Create new document and upsert (create or replace) to collection"""
product = {
"category": "gear-surf-surfboards",
"name": "Yamba Surfboard-{}".format(randint(50, 5000)),
"quantity": 1,
"sale": False,
}
result = collection.update_one(
{"name": product["name"]}, {"$set": product}, upsert=True
)
print("Upserted document with _id {}\n".format(result.upserted_id))
Hozzon létre egy dokumentumot a gyűjteményben a gyűjteményszintű művelet update_one meghívásával. Ebben a példában nem új dokumentumot, hanem új dokumentumot fog létrehozni. Ebben a példában az Upsert nem szükséges, mert a termék neve véletlenszerű. Célszerű azonban a kódot többször is futtatni, és a termék neve megegyezik.
A művelet eredménye update_one
tartalmazza a _id
későbbi műveletekhez használható mezőértéket. A _id tulajdonság automatikusan létre lett hozva.
Dokumentum lekérése
Dokumentum lekéréséhez használja a find_one metódust.
doc = collection.find_one({"_id": result.upserted_id})
print("Found a document with _id {}: {}\n".format(result.upserted_id, doc))
Az Azure Cosmos DB-ben az egyedi azonosító (_id
) és a partíciókulcs használatával kevésbé költséges pontolvasási műveletet hajthat végre.
Dokumentumok lekérdezése
Miután beszúrt egy dokumentumot, egy lekérdezést futtatva lekérheti az adott szűrőnek megfelelő összes dokumentumot. Ez a példa megkeresi az összes dokumentumot, amely megfelel egy adott kategóriának: gear-surf-surfboards
. A lekérdezés definiálása után hívja Collection.find
meg az eredmény lekérését Cursor
, majd használja a rendezést.
"""Query for documents in the collection"""
print("Products with category 'gear-surf-surfboards':\n")
allProductsQuery = {"category": "gear-surf-surfboards"}
for doc in collection.find(allProductsQuery).sort(
"name", pymongo.ASCENDING
):
print("Found a product with _id {}: {}\n".format(doc["_id"], doc))
Hibaelhárítás:
- Ha például
The index path corresponding to the specified order-by item is excluded.
hibaüzenetet kap, győződjön meg arról, hogy létrehozta az indexet.
A kód futtatása
Ez az alkalmazás létrehoz egy API-t a MongoDB-adatbázishoz és -gyűjteményhez, és létrehoz egy dokumentumot, majd pontosan ugyanazt a dokumentumot olvassa vissza. Végül a példa egy lekérdezést ad vissza, amely egy adott termékkategóriának megfelelő dokumentumokat ad vissza. A példa minden lépéssel adatokat ad ki a konzolnak az elvégzett lépésekről.
Az alkalmazás futtatásához egy terminál használatával lépjen az alkalmazás könyvtárára, és futtassa az alkalmazást.
python run.py
Az alkalmazás kimenetének az alábbi példához hasonlónak kell lennie:
Created db 'adventureworks' with shared throughput.
Created collection 'products'.
Indexes are: ['_id_', 'name_1']
Upserted document with _id <ID>
Found a document with _id <ID>:
{'_id': <ID>,
'category': 'gear-surf-surfboards',
'name': 'Yamba Surfboard-50',
'quantity': 1,
'sale': False}
Products with category 'gear-surf-surfboards':
Found a product with _id <ID>:
{'_id': ObjectId('<ID>'),
'name': 'Yamba Surfboard-386',
'category': 'gear-surf-surfboards',
'quantity': 1,
'sale': False}
Az erőforrások eltávolítása
Ha már nincs szüksége a NoSQL-hez készült Azure Cosmos DB-fiókra, törölheti a megfelelő erőforráscsoportot.
az group delete
Az erőforráscsoport törléséhez használja a parancsot.
az group delete --name $resourceGroupName