Dela via


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-portalen (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