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 Azure Cosmos DB voor MongoDB met behulp van een van de opensource-MongoDB-clientstuurprogramma's. De Azure Cosmos DB voor MongoDB maakt het gebruik van bestaande clientstuurprogramma's mogelijk door zich aan het MongoDB-wireprotocol te houden.
Met behulp van Azure Cosmos DB voor MongoDB 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, beschikbaarheid en latentiegaranties, 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 geen huidige 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 | Opmerking |
---|---|
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.
Als 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 | Opmerking | 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 op één veld ondersteund, maar sorteerbewerkingen op meerdere velden worden niet ondersteund.
Overige operatoren
Operator | Opmerking | 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 de $eval
operators worden niet ondersteund door Azure Cosmos DB.
Methoden
De volgende methoden worden ondersteund:
Cursormethoden
Wijze | Opmerking | 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'.
Er zijn unieke indexen beschikbaar voor alle Azure Cosmos DB-accounts met behulp van Azure Cosmos DB voor MongoDB.
TTL (time-to-live)
Azure Cosmos DB biedt alleen ondersteuning voor een 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 rollenbeheer
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 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. Als gevolg van 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. Dit 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.