Azure Cosmos DB for MongoDB (version 3.2): funktioner och syntax som stöds
GÄLLER FÖR: MongoDB
Azure Cosmos DB är Microsofts globalt distribuerade flermodellsdatabastjänst. Du kan kommunicera med Azure Cosmos DB for MongoDB med någon av MongoDB-klientdrivrutinerna med öppen källkod. Med Azure Cosmos DB for MongoDB kan du använda befintliga klientdrivrutiner genom att följa MongoDB-trådprotokollet.
Med hjälp av Azure Cosmos DB for MongoDB kan du dra nytta av fördelarna med den MongoDB som du är van vid, med alla företagsfunktioner som Azure Cosmos DB tillhandahåller: global distribution, automatisk horisontell partitionering, tillgänglighet och svarstidsgarantier, automatisk indexering av varje fält, kryptering i vila, säkerhetskopior och mycket mer.
Kommentar
Version 3.2 av Azure Cosmos DB for MongoDB har inga aktuella planer för livslängd (EOL). Det minsta varsel för en framtida EOL ä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 anges nedan. 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. Nedan 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
delete
find
findAndModify
getLastError
getMore
insert
update
Autentiseringskommandon
logout
authenticate
getnonce
Administrationskommandon
dropDatabase
listCollections
drop
create
filemd5
createIndexes
listIndexes
dropIndexes
connectionStatus
reIndex
Diagnostiska kommandon
buildInfo
collStats
dbStats
hostInfo
listDatabases
whatsmyuri
Sammansättningspipeline
Sammansättningskommandon
aggregate
count
distinct
Sammansättningsfaser
$project
$match
$limit
$skip
$unwind
$group
$sample
$sort
$lookup
$out
$count
$addFields
Sammansättningsuttryck
Booleska uttryck
$and
$or
$not
Uttryck för angivelse
$setEquals
$setIntersection
$setUnion
$setDifference
$setIsSubset
$anyElementTrue
$allElementsTrue
Jämförelseuttryck
$cmp
$eq
$gt
$gte
$lt
$lte
$ne
Aritmetiska uttryck
$abs
$add
$ceil
$divide
$exp
$floor
$ln
$log
$log10
$mod
$multiply
$pow
$sqrt
$subtract
$trunc
Stränguttryck
$concat
$indexOfBytes
$indexOfCP
$split
$strLenBytes
$strLenCP
$strcasecmp
$substr
$substrBytes
$substrCP
$toLower
$toUpper
Matrisuttryck
$arrayElemAt
$concatArrays
$filter
$indexOfArray
$isArray
$range
$reverseArray
$size
$slice
$in
Datumuttryck
$dayOfYear
$dayOfMonth
$dayOfWeek
$year
$month
$week
$hour
$minute
$second
$millisecond
$isoDayOfWeek
$isoWeek
Villkorliga uttryck
$cond
$ifNull
Sammansättningsackumulatorer
$sum
$avg
$first
$last
$max
$min
$push
$addToSet
Operatorer
Följande operatorer stöds med motsvarande användningsexempel. Överväg det här exempeldokumentet som används i frågorna nedan:
{
"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"
}
Operator | Exempel |
---|---|
eq |
{ "Volcano Name": { $eq: "Rainier" } } |
gt |
{ "Elevation": { $gt: 4000 } } |
gte |
{ "Elevation": { $gte: 4392 } } |
lt |
{ "Elevation": { $lt: 5000 } } |
lte |
{ "Elevation": { $lte: 5000 } } |
ne |
{ "Elevation": { $ne: 1 } } |
in |
{ "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } } |
nin |
{ "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } } |
or |
{ $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] } |
and |
{ $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] } |
not |
{ "Elevation": { $not: { $gt: 5000 } } } |
nor |
{ $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] } |
exists |
{ "Status": { $exists: true } } |
type |
{ "Status": { $type: "string" } } |
mod |
{ "Elevation": { $mod: [ 4, 0 ] } } |
regex |
{ "Volcano Name": { $regex: "^Rain"} } |
Kommentar
I $regex-frågor, tillåter vänsterförankrade 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 fler) regex-frågor.
Med till exempel följande ursprungliga fråga: find({x:{$regex: /^abc$/})
så måste den ä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 dokument som börjar med ^abc och den andra delen matchar de exakta posterna.
Fält-operatorn | fungerar som en or-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 så rekommenderar vi att du delar upp frågan i två olika frågor anslutna med operatorn $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })
.
Uppdateringsoperatorer
Fältuppdateringsoperatorer
$inc
$mul
$rename
$setOnInsert
$set
$unset
$min
$max
$currentDate
Matrisuppdateringsoperatorer
$addToSet
$pop
$pullAll
$pull
(Obs! $pull med villkor stöds inte)$pushAll
$push
$each
$slice
$sort
$position
Binär uppdateringsoperator
$bit
Geospatiala operatorer
Operator | Exempel | Stöds |
---|---|---|
$geoWithin |
{ "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
Ja |
$geoIntersects |
{ "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 ] ] ] } } } } |
Ja |
$near |
{ "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 ] ] ] } } } } |
Ja |
$nearSphere |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Ja |
$geometry |
{ "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 ] ] ] } } } } |
Ja |
$minDistance |
{ "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } |
Ja |
$maxDistance |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Ja |
$center |
{ "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } |
Ja |
$centerSphere |
{ "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
Ja |
$box |
{ "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } |
Ja |
$polygon |
{ "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 ] ] ] } } } } |
Ja |
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
Operator | Exempel | Kommentar |
---|---|---|
$all |
{ "Location.coordinates": { $all: [-121.758, 46.87] } } |
|
$elemMatch |
{ "Location.coordinates": { $elemMatch: { $lt: 0 } } } |
|
$size |
{ "Location.coordinates": { $size: 2 } } |
|
$comment |
{ "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"} |
|
$text |
Stöds ej. Använd $regex i stället. |
Operatorer som inte stöds
Operatorerna $where
$eval
och stöds inte av Azure Cosmos DB.
Metoder
Följande metoder stöds:
Markör-metoder
Metod | Exempel | Kommentar |
---|---|---|
cursor.sort() |
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 (Azure RBAC) och skrivskyddade och skrivskyddade lösenord/nycklar som kan hämtas via Azure Portal (sidan Anslutningssträng).
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 shardCollection, addShard, balancerStart, moveChunk osv. Du behöver bara ange shardnyckeln när du skapar containrarna eller frågar efter data.
Nästa steg
- Lär dig hur du använder Studio 3T med Azure Cosmos DB för MongoDB.
- Lär dig hur du använder Robo 3T med Azure Cosmos DB för MongoDB.
- Utforska MongoDB-exempel med Azure Cosmos DB för MongoDB.