Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med Azure Cosmos DB för MongoDB 3.2 kan du använda välbekanta MongoDB-funktioner med funktioner i företagsklass som global distribution, automatisk horisontell partitionering och hög tillgänglighet. I den här artikeln beskrivs vilka funktioner, syntax och fördelar som stöds med att använda Azure Cosmos DB för MongoDB 3.2.
Viktigt!
Version 3.2 av Azure Cosmos DB for MongoDB har inga aktuella planer för supportens slut. Minsta meddelandetiden för ett framtida slut på support är tre år.
Protokollstöd
Alla nya konton för Azure Cosmos DB för MongoDB är kompatibla med MongoDB-serverversion 3.6. Den här artikeln beskriver MongoDB version 3.2. De operatorer som stöds och eventuella begränsningar eller undantag visas här. Alla klientdrivrutiner som förstår dessa protokoll bör kunna ansluta till Azure Cosmos DB för MongoDB.
Azure Cosmos DB for MongoDB erbjuder också en sömlös uppgraderingsupplevelse för kvalificerande konton. Läs mer om uppgraderingsguiden för MongoDB-versionen.
Stöd för frågespråk
Azure Cosmos DB for MongoDB ger omfattande stöd för MongoDB-frågespråkskonstruktioner. Här hittar du en detaljerad lista över åtgärder som stöds för närvarande, operatorer, steg, kommandon och alternativ.
Databaskommandon
Azure Cosmos DB for MongoDB stöder följande databaskommandon:
Kommentar
Den här artikeln visar endast serverkommandon som stöds och exkluderar omslutningsfunktioner på klientsidan. Omslutningsfunktioner på klientsidan, till exempel deleteMany() och updateMany() internt, använder kommandona delete() och update() server. Funktioner som använder serverkommandon som stöds är kompatibla med Azure Cosmos DB för MongoDB.
Fråga och skriv-åtgärdskommandon
| Stöds | |
|---|---|
delete |
✅ Ja |
find |
✅ Ja |
findAndModify |
✅ Ja |
getLastError |
✅ Ja |
getMore |
✅ Ja |
insert |
✅ Ja |
update |
✅ Ja |
Autentiseringskommandon
| Stöds | |
|---|---|
logout |
✅ Ja |
authenticate |
✅ Ja |
getnonce |
✅ Ja |
Administrationskommandon
| Stöds | |
|---|---|
dropDatabase |
✅ Ja |
listCollections |
✅ Ja |
drop |
✅ Ja |
create |
✅ Ja |
filemd5 |
✅ Ja |
createIndexes |
✅ Ja |
listIndexes |
✅ Ja |
dropIndexes |
✅ Ja |
connectionStatus |
✅ Ja |
reIndex |
✅ Ja |
Diagnostiska kommandon
| Stöds | |
|---|---|
buildInfo |
✅ Ja |
collStats |
✅ Ja |
dbStats |
✅ Ja |
hostInfo |
✅ Ja |
listDatabases |
✅ Ja |
whatsmyuri |
✅ Ja |
Sammansättningspipeline
Sammansättningskommandon
| Stöds | |
|---|---|
aggregate |
✅ Ja |
count |
✅ Ja |
distinct |
✅ Ja |
Sammansättningsfaser
| Stöds | |
|---|---|
$project |
✅ Ja |
$match |
✅ Ja |
$limit |
✅ Ja |
$skip |
✅ Ja |
$unwind |
✅ Ja |
$group |
✅ Ja |
$sample |
✅ Ja |
$sort |
✅ Ja |
$lookup |
✅ Ja |
$out |
✅ Ja |
$count |
✅ Ja |
$addFields |
✅ Ja |
Sammansättningsuttryck
Booleska uttryck
| Stöds | |
|---|---|
$and |
✅ Ja |
$or |
✅ Ja |
$not |
✅ Ja |
Uttryck för angivelse
| Stöds | |
|---|---|
$setEquals |
✅ Ja |
$setIntersection |
✅ Ja |
$setUnion |
✅ Ja |
$setDifference |
✅ Ja |
$setIsSubset |
✅ Ja |
$anyElementTrue |
✅ Ja |
$allElementsTrue |
✅ Ja |
Jämförelseuttryck
| Stöds | |
|---|---|
$cmp |
✅ Ja |
$eq |
✅ Ja |
$gt |
✅ Ja |
$gte |
✅ Ja |
$lt |
✅ Ja |
$lte |
✅ Ja |
$ne |
✅ Ja |
Aritmetiska uttryck
| Stöds | |
|---|---|
$abs |
✅ Ja |
$add |
✅ Ja |
$ceil |
✅ Ja |
$divide |
✅ Ja |
$exp |
✅ Ja |
$floor |
✅ Ja |
$ln |
✅ Ja |
$log |
✅ Ja |
$log10 |
✅ Ja |
$mod |
✅ Ja |
$multiply |
✅ Ja |
$pow |
✅ Ja |
$sqrt |
✅ Ja |
$subtract |
✅ Ja |
$trunc |
✅ Ja |
Stränguttryck
| Stöds | |
|---|---|
$concat |
✅ Ja |
$indexOfBytes |
✅ Ja |
$indexOfCP |
✅ Ja |
$split |
✅ Ja |
$strLenBytes |
✅ Ja |
$strLenCP |
✅ Ja |
$strcasecmp |
✅ Ja |
$substr |
✅ Ja |
$substrBytes |
✅ Ja |
$substrCP |
✅ Ja |
$toLower |
✅ Ja |
$toUpper |
✅ Ja |
Matrisuttryck
| Stöds | |
|---|---|
$arrayElemAt |
✅ Ja |
$concatArrays |
✅ Ja |
$filter |
✅ Ja |
$indexOfArray |
✅ Ja |
$isArray |
✅ Ja |
$range |
✅ Ja |
$reverseArray |
✅ Ja |
$size |
✅ Ja |
$slice |
✅ Ja |
$in |
✅ Ja |
Datumuttryck
| Stöds | |
|---|---|
$dayOfYear |
✅ Ja |
$dayOfMonth |
✅ Ja |
$dayOfWeek |
✅ Ja |
$year |
✅ Ja |
$month |
✅ Ja |
$week |
✅ Ja |
$hour |
✅ Ja |
$minute |
✅ Ja |
$second |
✅ Ja |
$millisecond |
✅ Ja |
$isoDayOfWeek |
✅ Ja |
$isoWeek |
✅ Ja |
Villkorliga uttryck
| Stöds | |
|---|---|
$cond |
✅ Ja |
$ifNull |
✅ Ja |
Sammansättningsackumulatorer
| Stöds | |
|---|---|
$sum |
✅ Ja |
$avg |
✅ Ja |
$first |
✅ Ja |
$last |
✅ Ja |
$max |
✅ Ja |
$min |
✅ Ja |
$push |
✅ Ja |
$addToSet |
✅ Ja |
Operatorer
Följande operatorer stöds med motsvarande användningsexempel. Överväg det här exempeldokumentet som används i frågorna här:
{
"Volcano Name": "Rainier",
"Country": "United States",
"Region": "US-Washington",
"Location": {
"type": "Point",
"coordinates": [
-121.758,
46.87
]
},
"Elevation": 4392,
"Type": "Stratovolcano",
"Status": "Dendrochronology",
"Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
| Stöds | Exempel | |
|---|---|---|
eq |
✅ Ja | { "Volcano Name": { $eq: "Rainier" } } |
gt |
✅ Ja | { "Elevation": { $gt: 4000 } } |
gte |
✅ Ja | { "Elevation": { $gte: 4392 } } |
lt |
✅ Ja | { "Elevation": { $lt: 5000 } } |
lte |
✅ Ja | { "Elevation": { $lte: 5000 } } |
ne |
✅ Ja | { "Elevation": { $ne: 1 } } |
in |
✅ Ja | { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } } |
nin |
✅ Ja | { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } } |
or |
✅ Ja | { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] } |
and |
✅ Ja | { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] } |
not |
✅ Ja | { "Elevation": { $not: { $gt: 5000 } } } |
nor |
✅ Ja | { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] } |
exists |
✅ Ja | { "Status": { $exists: true } } |
type |
✅ Ja | { "Status": { $type: "string" } } |
mod |
✅ Ja | { "Elevation": { $mod: [ 4, 0 ] } } |
regex |
✅ Ja | { "Volcano Name": { $regex: "^Rain"} } |
Kommentar
I de $regex frågorna tillåter vänsteranknerade uttryck indexsökning. Om du använder modifierarna i (skiftlägesokänsligt) och m (flera rader) så får du dock samlingsskanningen i alla uttryck.
När det finns ett behov av att inkludera $ eller |är det bäst att skapa två (eller flera) regex-frågor. Med tanke på följande ursprungliga fråga: find({x:{$regex: /^abc$/})måste den till exempel ändras på följande sätt:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
Den första delen använder indexet för att begränsa sökningen till de dokument som börjar med ^abc och den andra delen matchar de exakta posterna. Stapeloperatorn | fungerar som en "eller"-funktion – frågan find({x:{$regex: /^abc |^def/}) matchar dokumenten där fältet x har värden som börjar med "abc" eller "def". Om du vill använda indexet delar du upp frågan i två olika frågor som är kopplade till $or-operatorn: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).
Uppdateringsoperatorer
Fältuppdateringsoperatorer
| Stöds | |
|---|---|
$inc |
✅ Ja |
$mul |
✅ Ja |
$rename |
✅ Ja |
$setOnInsert |
✅ Ja |
$set |
✅ Ja |
$unset |
✅ Ja |
$min |
✅ Ja |
$max |
✅ Ja |
$currentDate |
✅ Ja |
Matrisuppdateringsoperatorer
| Stöds | |
|---|---|
$addToSet |
✅ Ja |
$pop |
✅ Ja |
$pullAll |
✅ Ja |
$pull |
✅ Ja |
$pushAll |
✅ Ja |
$push |
✅ Ja |
$each |
✅ Ja |
$slice |
✅ Ja |
$sort |
✅ Ja |
$position |
✅ Ja |
Tips/Råd
$pull med ett villkor stöds inte.
Binär uppdateringsoperator
| Stöds | |
|---|---|
$bit |
✅ Ja |
Geospatiala operatorer
| Stöds | Exempel | |
|---|---|---|
$geoWithin |
✅ Ja | { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
$geoIntersects |
✅ Ja | { "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
$near |
✅ Ja | { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
$nearSphere |
✅ Ja | { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
$geometry |
✅ Ja | { "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
$minDistance |
✅ Ja | { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } |
$maxDistance |
✅ Ja | { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
$center |
✅ Ja | { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } |
$centerSphere |
✅ Ja | { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
$box |
✅ Ja | { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } |
$polygon |
✅ Ja | { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } |
Sortera åtgärder
När du använder åtgärden findOneAndUpdate stöds sorteringsåtgärder i ett enda fält, men sorteringsåtgärder på flera fält stöds inte.
Andra operatorer
| Stöds | Exempel | Kommentar | |
|---|---|---|---|
$all |
✅ Ja | { "Location.coordinates": { $all: [-121.758, 46.87] } } |
|
$elemMatch |
✅ Ja | { "Location.coordinates": { $elemMatch: { $lt: 0 } } } |
|
$size |
✅ Ja | { "Location.coordinates": { $size: 2 } } |
|
$comment |
✅ Ja | { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"} |
|
$text |
✅ Ja | Stöds ej. Använd $regex i stället. |
Operatorer som inte stöds
Azure Cosmos DB for MongoDB stöder inte operatorerna $where och $eval .
Metoder
Följande metoder stöds:
Markör-metoder
| Stöds | Exempel | Kommentar | |
|---|---|---|---|
cursor.sort() |
✅ Ja | cursor.sort({ "Elevation": -1 }) |
Dokument utan sorteringsnyckel returneras inte |
Unika index
Azure Cosmos DB indexerar som standard varje fält i dokument som skrivs till databasen. Unika index säkerställer att ett visst fält inte har duplicerade värden i alla dokument i en samling, på samma sätt som unikhet bevaras på standardnyckeln _id . Du kan skapa anpassade index i Azure Cosmos DB med hjälp av kommandot createIndex, inklusive villkoret "unik".
Unika index är tillgängliga för alla Azure Cosmos DB-konton med Hjälp av Azure Cosmos DB för MongoDB.
TTL-värde (time to live)
Azure Cosmos DB stöder endast en TTL (time-to-live) på samlingsnivå (_ts) i version 3.2. Uppgradera till version 3.6+ för att dra nytta av andra former av TTL.
Användar- och rollhantering
Azure Cosmos DB har ännu inte stöd för användare och roller. Azure Cosmos DB har dock stöd för rollbaserad åtkomstkontroll i Azure och skrivbara och skrivskyddade lösenord/nycklar som kan hämtas via Azure-portalen (Anslutningssträngssidan).
Replikering
Azure Cosmos DB stöder automatisk, inbyggd replikering på de understa lagren. Denna logik utökas för att även uppnå global replikering med låga svarstider. Azure Cosmos DB stöder inte manuella replikeringskommandon.
Skrivanmärkningar
Vissa program förlitar sig på ett skrivproblem som anger antalet svar som krävs under en skrivåtgärd. På grund av hur Azure Cosmos DB hanterar replikering i bakgrunden är alla skrivningar automatiskt kvorum som standard. Skrivanmärkningar som anges av klientkoden ignoreras. Läs mer om hur du maximerar tillgänglighet och prestanda med hjälp av konsekvensnivåer.
Horisontell partitionering
Azure Cosmos DB stöder automatisk, horisontell partitionering på serversidan. Den hanterar skapande, placering och balansering av fragment automatiskt. Azure Cosmos DB stöder inte manuella partitioneringskommandon, vilket innebär att du inte behöver anropa kommandon som addShard, balancerStartoch moveChunk. Du behöver bara ange shardnyckeln när du skapar containrarna eller frågar efter data.