Azure Cosmos DB voor MongoDB (versie 3.2): ondersteunde functies en syntaxis

VAN TOEPASSING OP: MongoDB

Azure Cosmos DB is de wereldwijd gedistribueerde multimodel-databaseservice van Microsoft. U kunt communiceren met de Azure Cosmos DB voor MongoDB met behulp van een van de opensource-Stuurprogramma's van de MongoDB-client. Azure Cosmos DB voor MongoDB maakt het gebruik van bestaande clientstuurprogramma's mogelijk door zich te houden aan het MongoDB-wireprotocol.

Door azure Cosmos DB voor MongoDB te gebruiken, kunt u profiteren van de voordelen van de MongoDB die u gewend bent, met alle zakelijke mogelijkheden die Azure Cosmos DB biedt: wereldwijde distributie, automatische sharding, garanties voor beschikbaarheid en latentie, automatische indexering van elk veld, versleuteling-at-rest, back-ups en nog veel meer.

Notitie

Versie 3.2 van Azure Cosmos DB voor MongoDB heeft momenteel geen plannen voor het einde van de levensduur (EOL). De minimale kennisgeving voor een toekomstige EOL is drie jaar.

Ondersteuning voor protocol

Alle nieuwe accounts voor Azure Cosmos DB voor MongoDB zijn compatibel met MongoDB-serverversie 3.6. Dit artikel is van toepassing op MongoDB-versie 3.2. De ondersteunde operators en eventuele beperkingen of uitzonderingen worden hieronder vermeld. Elk clientstuurprogramma dat deze protocollen begrijpt, moet verbinding kunnen maken met Azure Cosmos DB voor MongoDB.

Azure Cosmos DB voor MongoDB biedt ook een naadloze upgrade-ervaring voor in aanmerking komende accounts. Meer informatie vindt u in de versie-upgradehandleiding voor MongoDB.

Ondersteuning voor querytaal

Azure Cosmos DB voor MongoDB biedt uitgebreide ondersteuning voor MongoDB-querytaalconstructies. Hieronder ziet u de gedetailleerde lijst met momenteel ondersteunde bewerkingen, operators, fasen, opdrachten en opties.

Databaseopdrachten

Azure Cosmos DB voor MongoDB ondersteunt de volgende databaseopdrachten:

Notitie

Dit artikel bevat alleen de ondersteunde serveropdrachten en sluit wrapper-functies aan de clientzijde uit. Wrapper-functies aan de clientzijde, zoals deleteMany() en updateMany(), maken intern gebruik van de serveropdrachten delete() en update(). Functies die gebruikmaken van ondersteunde serveropdrachten zijn compatibel met Azure Cosmos DB voor MongoDB.

Opdrachten voor query- en schrijfbewerkingen

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

Verificatieopdrachten

  • logout
  • authenticate
  • getnonce

Beheeropdrachten

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

Diagnostics commands

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

Samenvoegingspijplijn

Samenvoegingsopdrachten

  • aggregate
  • count
  • distinct

Samenvoegingsfasen

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

Expressies voor samenvoegen

Booleaanse expressies

  • $and
  • $or
  • $not

Expressies voor instellen

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

Expressies voor vergelijken

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

Rekenkundige expressies

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

Tekenreeksexpressies

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

Matrixexpressies

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

Datumexpressies

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

Voorwaardelijke expressies

  • $cond
  • $ifNull

Samenvoegingsaccumulators

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

Operators

De volgende operators worden ondersteund met de bijbehorende gebruiksvoorbeelden. Overweeg om dit voorbeelddocument te gebruiken in de onderstaande query’s:

{
  "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 Voorbeeld
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"} }

Opmerkingen

In $regex-query’s is zoeken in de index toegestaan op basis van links-verankerde expressies. Als u echter de aanpassingsfuncties i (geen hoofdlettergevoeligheid) en m (meerdere regels) gebruikt, wordt de verzameling gescand in alle expressies. Wanneer u $of | moet opnemen, kunt u het beste twee (of meer) regex-query's maken. Bijvoorbeeld, bij de volgende oorspronkelijke query: find({x:{$regex: /^abc$/}), moet dit als volgt worden gewijzigd: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). Het eerste deel maakt gebruik van de index om alleen te zoeken naar de documenten die beginnen met ^abc en het tweede deel zoekt naar een overeenkomst tussen de exacte vermeldingen. De streepoperator | fungeert als de functie: or. De query find({x:{$regex: /^abc|^def/}) komt overeen met de documenten waarin het veld x waarden heeft die beginnen met abc of def. Als u de index wilt gebruiken, kunt u de query het beste opsplitsen in twee verschillende query’s die zijn verbonden met de operator $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Operators voor updates

Operators voor veldupdates

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

Operators voor matrixupdates

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Opmerking: $pull met voorwaarde wordt niet ondersteund)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Operators voor bitwise-updates

  • $bit

Georuimtelijke operators

Operator Voorbeeld Ondersteund
$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

Bewerkingen sorteren

Wanneer u de findOneAndUpdate bewerking gebruikt, worden sorteerbewerkingen voor één veld ondersteund, maar worden sorteerbewerkingen op meerdere velden niet ondersteund.

Overige operatoren

Operator Voorbeeld Opmerkingen
$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 Wordt niet ondersteund. Gebruik in plaats hiervan $regex.

Niet-ondersteunde operators

De $where operators en $eval worden niet ondersteund door Azure Cosmos DB.

Methoden

De volgende methoden worden ondersteund:

Cursormethoden

Methode Voorbeeld Opmerkingen
cursor.sort() cursor.sort({ "Elevation": -1 }) Documenten zonder sorteersleutel worden niet geretourneerd

Unieke indexen

Met Azure Cosmos DB worden alle velden geïndexeerd in documenten die standaard naar de database zijn geschreven. Unieke indexen zorgen ervoor dat een specifiek veld geen dubbele waarden bevat in alle documenten van een verzameling, net zoals de uniekheid van de standaard _id-sleutel behouden blijft. U kunt aangepaste indexen maken in Azure Cosmos DB met behulp van de opdracht createIndex, inclusief de beperking 'uniek'.

Unieke indexen zijn beschikbaar voor alle Azure Cosmos DB-accounts met Behulp van Azure Cosmos DB voor MongoDB.

TTL (time-to-live)

Azure Cosmos DB ondersteunt alleen time-to-live (TTL) op verzamelingsniveau (_ts) in versie 3.2. Voer een upgrade uit naar versie 3.6+ om te profiteren van andere vormen van TTL.

Gebruikers- en rolbeheer

Azure Cosmos DB biedt nog geen ondersteuning voor gebruikers en rollen. Azure Cosmos DB ondersteunt echter op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) en wachtwoorden/sleutels voor lezen/schrijven en alleen-lezen die kunnen worden verkregen via de Azure Portal (pagina Verbindingsreeks).

Replicatie

Azure Cosmos DB biedt ondersteuning voor automatische, systeemeigen replicatie op de laagste lagen. Deze logica is uitgebreid om tevens globale replicatie met een lage latentie te bereiken. Azure Cosmos DB biedt geen ondersteuning voor handmatige replicatieopdrachten.

Schrijfprobleem

Bepaalde toepassingen vertrouwen op een Write Concern ('schrijfveiligheid') dat het aantal vereiste reacties tijdens een schrijfbewerking opgeeft. Vanwege de manier waarop Azure Cosmos DB replicatie op de achtergrond verwerkt, worden alle schrijfbewerkingen standaard automatisch Quorum. Alle schrijfproblemen die in clientcode zijn opgegeven, worden genegeerd. Zie Consistentieniveaus gebruiken om de beschikbaarheid en prestaties te maximaliseren voor meer informatie.

Sharding

Azure Cosmos DB biedt ondersteuning voor automatische sharding aan serverzijde. Het beheert automatisch Shard maken, plaatsen en balanceren. Azure Cosmos DB biedt geen ondersteuning voor handmatige sharding-opdrachten, wat betekent dat u geen opdrachten zoals shardCollection, addShard, balancerStart, moveChunk enzovoort hoeft aan te roepen. U hoeft alleen de shardsleutel op te geven tijdens het maken van de containers of het uitvoeren van query's op de gegevens.

Volgende stappen

  • Meer informatie over het gebruik van Studio 3T met Azure Cosmos DB voor MongoDB.
  • Meer informatie over het gebruik van Robo 3T met Azure Cosmos DB voor MongoDB.
  • Verken MongoDB-voorbeelden met Azure Cosmos DB voor MongoDB.