Azure Cosmos DB voor MongoDB (serverversie 7.0): Ondersteunde functies en syntaxis
VAN TOEPASSING OP: MongoDB
Azure Cosmos DB is de wereldwijd gedistribueerde databaseservice van Microsoft met meerdere modellen. Azure Cosmos DB biedt meerdere database-API's. U kunt communiceren met Azure Cosmos DB voor MongoDB met behulp van een van de opensource-MongoDB-clientstuurprogramma's. Azure Cosmos DB voor MongoDB ondersteunt het gebruik van bestaande clientstuurprogramma's door zich aan het MongoDB-wireprotocol te houden.
Met behulp van Azure Cosmos DB voor MongoDB kunt u profiteren van de voordelen van MongoDB waarmee u gewend bent, met alle bedrijfsmogelijkheden die Azure Cosmos DB biedt: wereldwijde distributie, automatische sharding, beschikbaarheid en latentiegaranties, versleuteling at rest, back-ups en nog veel meer.
Protocolondersteuning
De ondersteunde operators en eventuele beperkingen of uitzonderingen worden vermeld in dit artikel. Elk clientstuurprogramma dat deze protocollen begrijpt, moet verbinding kunnen maken met Azure Cosmos DB voor MongoDB. Wanneer u Azure Cosmos DB voor MongoDB-accounts maakt, heeft de 3.6+ versie van accounts een eindpunt in de indeling *.mongo.cosmos.azure.com
. De 3.2-versie van accounts heeft een eindpunt in de indeling *.documents.azure.com
.
Notitie
In dit artikel worden alleen de ondersteunde serveropdrachten vermeld en worden wrapper-functies aan de clientzijde uitgesloten. Wrapper-functies aan de clientzijde, zoals deleteMany()
en updateMany()
intern, maken gebruik van de delete()
en update()
serveropdrachten. Functies die gebruikmaken van ondersteunde serveropdrachten zijn compatibel met Azure Cosmos DB voor MongoDB.
Ondersteuning voor querytaal
Azure Cosmos DB voor MongoDB biedt uitgebreide ondersteuning voor MongoDB-querytaalconstructies. In de volgende secties vindt u de gedetailleerde lijst met momenteel ondersteunde bewerkingen, operators, fasen, opdrachten en opties.
Databaseopdrachten
Azure Cosmos DB voor MongoDB ondersteunt de volgende databaseopdrachten.
Opdrachten voor query- en schrijfbewerkingen
Opdracht | Ondersteund |
---|---|
change streams |
Ja |
delete |
Ja |
eval |
No |
find |
Ja |
findAndModify |
Ja |
getLastError |
Ja |
getMore |
Ja |
getPrevError |
No |
insert |
Ja |
parallelCollectionScan |
No |
resetError |
No |
update |
Ja |
Transactieopdrachten
Notitie
Transacties met meerdere documenten worden alleen ondersteund binnen één niet-shard-verzameling. Transacties tussen meerdere documenten en meerdere shards worden nog niet ondersteund in de API voor MongoDB.
Opdracht | Ondersteund |
---|---|
abortTransaction |
Ja |
commitTransaction |
Ja |
Verificatieopdrachten
Opdracht | Ondersteund |
---|---|
authenticate |
Ja |
getnonce |
Ja |
logout |
Ja |
Beheeropdrachten
Opdracht | Ondersteund |
---|---|
cloneCollectionAsCapped |
Nee |
collMod |
Nee |
connectionStatus |
Nee |
convertToCapped |
Nee |
copydb |
No |
create |
Ja |
createIndexes |
Ja |
currentOp |
Ja |
drop |
Ja |
dropDatabase |
Ja |
dropIndexes |
Ja |
filemd5 |
Ja |
killCursors |
Ja |
killOp |
No |
listCollections |
Ja |
listDatabases |
Ja |
listIndexes |
Ja |
reIndex |
Ja |
renameCollection |
Nr. |
Diagnostics commands
Opdracht | Ondersteund |
---|---|
buildInfo |
Ja |
collStats |
Ja |
connPoolStats |
No |
connectionStatus |
Nee |
dataSize |
Nee |
dbHash |
No |
dbStats |
Ja |
explain |
Ja |
features |
No |
hostInfo |
Ja |
listDatabases |
Ja |
listCommands |
No |
profiler |
Nee |
serverStatus |
Nee |
top |
No |
whatsmyuri |
Ja |
Samenvoegingspijplijn
Azure Cosmos DB voor MongoDB ondersteunt de volgende aggregatieopdrachten.
Samenvoegingsopdrachten
Opdracht | Ondersteund |
---|---|
aggregate |
Ja |
count |
Ja |
distinct |
Ja |
mapReduce |
Nr. |
Samenvoegingsfasen
Opdracht | Ondersteund |
---|---|
addFields |
Ja |
bucket |
No |
bucketAuto |
No |
changeStream |
Ja |
collStats |
No |
count |
Ja |
currentOp |
No |
facet |
Ja |
geoNear |
Ja |
graphLookup |
No |
group |
Ja |
indexStats |
No |
limit |
Ja |
listLocalSessions |
No |
listSessions |
Nr. |
lookup |
Gedeeltelijk |
match |
Ja |
merge |
Ja |
out |
Ja |
planCacheStats |
Ja |
project |
Ja |
redact |
Ja |
regexFind |
Ja |
regexFindAll |
Ja |
regexMatch |
Ja |
replaceRoot |
Ja |
replaceWith |
Ja |
sample |
Ja |
set |
Ja |
skip |
Ja |
sort |
Ja |
sortByCount |
Ja |
unset |
Ja |
unwind |
Ja |
Notitie
De $lookup
aggregatie biedt nog geen ondersteuning voor de functie niet-gerelateerde subquery's die is geïntroduceerd in serverversie 3.6. Als u probeert de $lookup
operator met de let
en pipeline
velden te gebruiken, wordt er een foutbericht weergegeven dat let
niet wordt ondersteund .
Booleaanse expressies
Opdracht | Ondersteund |
---|---|
and |
Ja |
not |
Ja |
or |
Ja |
Conversie-expressies
Opdracht | Ondersteund |
---|---|
convert |
Ja |
toBool |
Ja |
toDate |
Ja |
toDecimal |
Ja |
toDouble |
Ja |
toInt |
Ja |
toLong |
Ja |
toObjectId |
Ja |
toString |
Ja |
Expressies voor instellen
Opdracht | Ondersteund |
---|---|
setEquals |
Ja |
setIntersection |
Ja |
setUnion |
Ja |
setDifference |
Ja |
setIsSubset |
Ja |
anyElementTrue |
Ja |
allElementsTrue |
Ja |
Expressies voor vergelijken
Notitie
De API voor MongoDB biedt geen ondersteuning voor vergelijkingsexpressies met een letterlijke matrix in de query.
Opdracht | Ondersteund |
---|---|
cmp |
Ja |
eq |
Ja |
gt |
Ja |
gte |
Ja |
lt |
Ja |
lte |
Ja |
ne |
Ja |
in |
Ja |
nin |
Ja |
Rekenkundige expressies
Opdracht | Ondersteund |
---|---|
abs |
Ja |
add |
Ja |
ceil |
Ja |
divide |
Ja |
exp |
Ja |
floor |
Ja |
ln |
Ja |
log |
Ja |
log10 |
Ja |
mod |
Ja |
multiply |
Ja |
pow |
Ja |
round |
Ja |
sqrt |
Ja |
subtract |
Ja |
trunc |
Ja |
Trigonometrische expressies
Opdracht | Ondersteund |
---|---|
acos |
Ja |
acosh |
Ja |
asin |
Ja |
asinh |
Ja |
atan |
Ja |
atan2 |
Ja |
atanh |
Ja |
cos |
Ja |
cosh |
Ja |
degreesToRadians |
Ja |
radiansToDegrees |
Ja |
sin |
Ja |
sinh |
Ja |
tan |
Ja |
tanh |
Ja |
Tekenreeksexpressies
Opdracht | Ondersteund |
---|---|
concat |
Ja |
indexOfBytes |
Ja |
indexOfCP |
Ja |
ltrim |
Ja |
rtrim |
Ja |
trim |
Ja |
split |
Ja |
strLenBytes |
Ja |
strLenCP |
Ja |
strcasecmp |
Ja |
substr |
Ja |
substrBytes |
Ja |
substrCP |
Ja |
toLower |
Ja |
toUpper |
Ja |
Operator voor tekst zoeken
Opdracht | Ondersteund |
---|---|
meta |
Nee |
Matrixexpressies
Opdracht | Ondersteund |
---|---|
arrayElemAt |
Ja |
arrayToObject |
Ja |
concatArrays |
Ja |
filter |
Ja |
indexOfArray |
Ja |
isArray |
Ja |
objectToArray |
Ja |
range |
Ja |
reverseArray |
Ja |
reduce |
Ja |
size |
Ja |
slice |
Ja |
zip |
Ja |
in |
Ja |
Operators voor variabelen
Opdracht | Ondersteund |
---|---|
map |
Ja |
let |
Ja |
Systeemvariabelen
Opdracht | Ondersteund |
---|---|
$$CLUSTERTIME |
Ja |
$$CURRENT |
Ja |
$$DESCEND |
Ja |
$$KEEP |
Ja |
$$NOW |
Ja |
$$PRUNE |
Ja |
$$REMOVE |
Ja |
$$ROOT |
Ja |
Letterlijke operator
Opdracht | Ondersteund |
---|---|
literal |
Ja |
Datumexpressies
Opdracht | Ondersteund |
---|---|
dayOfYear |
Ja |
dayOfMonth |
Ja |
dayOfWeek |
Ja |
year |
Ja |
month |
Ja |
week |
Ja |
hour |
Ja |
minute |
Ja |
second |
Ja |
millisecond |
Ja |
dateToString |
Ja |
isoDayOfWeek |
Ja |
isoWeek |
Ja |
dateFromParts |
Ja |
dateToParts |
Ja |
dateFromString |
Ja |
isoWeekYear |
Ja |
Voorwaardelijke expressies
Opdracht | Ondersteund |
---|---|
cond |
Ja |
ifNull |
Ja |
switch |
Ja |
Operator voor gegevenstype
Opdracht | Ondersteund |
---|---|
type |
Ja |
Accumulatorexpressies
Opdracht | Ondersteund |
---|---|
sum |
Ja |
avg |
Ja |
first |
Ja |
last |
Ja |
max |
Ja |
min |
Ja |
push |
Ja |
addToSet |
Ja |
stdDevPop |
Ja |
stdDevSamp |
Ja |
Operator voor samenvoegen
Opdracht | Ondersteund |
---|---|
mergeObjects |
Ja |
Data types
Azure Cosmos DB voor MongoDB ondersteunt documenten die zijn gecodeerd in MongoDB BSON-indeling. Versies 4.0 en hoger (4.0+) verbeteren het interne gebruik van deze indeling om de prestaties te verbeteren en de kosten te verlagen. Documenten die zijn geschreven of bijgewerkt via een eindpunt waarop 4.0+ wordt uitgevoerd, profiteren van deze optimalisatie.
In een upgradescenario profiteren documenten die zijn geschreven vóór de upgrade naar versie 4.0+ niet van de verbeterde prestaties totdat ze worden bijgewerkt via een schrijfbewerking via het 4.0+-eindpunt.
Ondersteuning van documenten van 16 MB verhoogt de groottelimiet voor uw documenten van 2 MB naar 16 MB. Deze limiet geldt alleen voor verzamelingen die zijn gemaakt nadat deze functie is ingeschakeld. Zodra deze functie is ingeschakeld voor uw databaseaccount, kan deze niet meer worden uitgeschakeld.
Als u documentondersteuning van 16 MB wilt inschakelen, wijzigt u de instelling op het tabblad Functies voor de resource in Azure Portal of voegt u de EnableMongo16MBDocumentSupport
mogelijkheid programmatisch toe.
U wordt aangeraden het opnieuw proberen aan serverzijde in te schakelen en te voorkomen dat u jokertekenindexen gebruikt om ervoor te zorgen dat aanvragen in grotere documenten slagen. Het verhogen van uw database- of verzamelingsaanvraageenheden kan ook helpen bij de prestaties.
Opdracht | Ondersteund |
---|---|
Double |
Ja |
String |
Ja |
Object |
Ja |
Array |
Ja |
Binary Data |
Ja |
ObjectId |
Ja |
Boolean |
Ja |
Date |
Ja |
Null |
Ja |
32-bit Integer (int) |
Ja |
Timestamp |
Ja |
64-bit Integer (long) |
Ja |
MinKey |
Ja |
MaxKey |
Ja |
Decimal128 |
Ja |
Regular Expression |
Ja |
JavaScript |
Ja |
JavaScript (with scope) |
Ja |
Undefined |
Ja |
Indexen en indexeigenschappen
Azure Cosmos DB voor MongoDB ondersteunt de volgende indexopdrachten en indexeigenschappen.
Indexen
Opdracht | Ondersteund |
---|---|
Single Field Index |
Ja |
Compound Index |
Ja |
Multikey Index |
Ja |
Text Index |
No |
2dsphere |
Ja |
2d Index |
No |
Hashed Index |
Nr. |
Indexeigenschappen
Opdracht | Ondersteund |
---|---|
TTL |
Ja |
Unique |
Ja |
Partial |
Alleen ondersteund voor unieke indexen |
Case Insensitive |
Nee |
Sparse |
No |
Background |
Ja |
Operators
Azure Cosmos DB voor MongoDB ondersteunt de volgende operators.
Logische operators
Opdracht | Ondersteund |
---|---|
or |
Ja |
and |
Ja |
not |
Ja |
nor |
Ja |
Operators voor elementen
Opdracht | Ondersteund |
---|---|
exists |
Ja |
type |
Ja |
Operators voor evaluatiequery's
Opdracht | Ondersteund |
---|---|
expr |
Ja |
jsonSchema |
No |
mod |
Ja |
regex |
Ja |
text |
Nee (niet ondersteund. Gebruik $regex in plaats daarvan.) |
where |
Nee |
In $regex
query's staan links verankerde expressies indexzoekopdrachten toe. Door de i
modifier (hoofdlettergevoeligheid) en de m
modifier (multiline) te gebruiken, wordt de verzameling echter gescand in alle expressies.
Als u twee (of meer) query's moet opnemen $
of |
gebruiken, kunt u het beste twee (of meer) $regex
query's maken.
Wijzig bijvoorbeeld de volgende oorspronkelijke query:
find({x:{$regex: /^abc$/})
Voor deze query:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
Het eerste deel van de gewijzigde query maakt gebruik van de index om de zoekopdracht te beperken tot documenten die beginnen.^abc
Het tweede deel van de query komt overeen met de exacte vermeldingen. De staafoperator (|
) fungeert als een 'or'-functie. De query find({x:{$regex: /^abc |^def/})
komt overeen met de documenten waarin het veld x
waarden bevat die beginnen met abc
of def
. Als u de index wilt gebruiken, wordt u aangeraden de query op te splitsen in twee verschillende query's die door de $or
operator worden samengevoegd: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })
Operators voor matrices
Opdracht | Ondersteund |
---|---|
all |
Ja |
elemMatch |
Ja |
size |
Ja |
Operator voor opmerkingen
Opdracht | Ondersteund |
---|---|
comment |
Ja |
Operators voor projecties
Opdracht | Ondersteund |
---|---|
elemMatch |
Ja |
meta |
No |
slice |
Ja |
Operators voor updates
Operators voor veldupdates
Opdracht | Ondersteund |
---|---|
inc |
Ja |
mul |
Ja |
rename |
Ja |
setOnInsert |
Ja |
set |
Ja |
unset |
Ja |
min |
Ja |
max |
Ja |
currentDate |
Ja |
Operators voor matrixupdates
Opdracht | Ondersteund |
---|---|
$ |
Ja |
$[] |
Ja |
$[\<identifier\>] |
Ja |
addToSet |
Ja |
pop |
Ja |
pullAll |
Ja |
pull |
Ja |
push |
Ja |
pushAll |
Ja |
Aanpassingsfuncties voor bijwerken
Opdracht | Ondersteund |
---|---|
each |
Ja |
slice |
Ja |
sort |
Ja |
position |
Ja |
Operators voor bitwise-updates
Opdracht | Ondersteund |
---|---|
bit |
Ja |
bitsAllSet |
No |
bitsAnySet |
Nee |
bitsAllClear |
Nee |
bitsAnyClear |
Nr. |
Georuimtelijke operators
Operator | Ondersteund |
---|---|
$geoWithin |
Ja |
$geoIntersects |
Ja |
$near |
Ja |
$nearSphere |
Ja |
$geometry |
Ja |
$minDistance |
Ja |
$maxDistance |
Ja |
$center |
No |
$centerSphere |
Nee |
$box |
Nee |
$polygon |
Nr. |
Bewerkingen sorteren
Wanneer u de findOneAndUpdate
bewerking gebruikt, worden sorteerbewerkingen op één veld ondersteund. Sorteerbewerkingen op meerdere velden worden niet ondersteund.
Indexeren
De API voor MongoDB ondersteunt verschillende indexen om sorteren op meerdere velden mogelijk te maken, queryprestaties te verbeteren en uniekheid af te dwingen.
Versleuteling op veldniveau aan de clientzijde
Veldversleuteling op clientniveau is een stuurprogrammafunctie en is compatibel met de API voor MongoDB. Expliciete versleuteling, waarbij het stuurprogramma elk veld expliciet versleutelt wanneer het wordt geschreven, wordt ondersteund. Automatische versleuteling wordt niet ondersteund. Expliciete ontsleuteling en automatische ontsleuteling wordt ondersteund.
De mongocryptd
bewerking mag niet worden uitgevoerd omdat deze niet nodig is om een van de ondersteunde bewerkingen uit te voeren.
GridFS
Azure Cosmos DB ondersteunt GridFS via elk Mongo-stuurprogramma dat compatibel is met GridFS.
Replicatie
Azure Cosmos DB biedt ondersteuning voor automatische, systeemeigen replicatie op de laagste lagen. Deze logica wordt ook uitgebreid om wereldwijde replicatie met lage latentie te realiseren. Azure Cosmos DB biedt geen ondersteuning voor handmatige replicatieopdrachten.
Schrijfbewerkingen opnieuw proberen
Met de functie voor opnieuw proberende schrijfbewerkingen kunnen MongoDB-stuurprogramma's bepaalde schrijfbewerkingen automatisch opnieuw proberen. De functie resulteert in strengere vereisten voor bepaalde bewerkingen, die overeenkomen met de MongoDB-protocolvereisten. Als deze functie is ingeschakeld, moeten updatebewerkingen, inclusief verwijderingen, in shardverzamelingen de shardsleutel worden opgenomen in het queryfilter of de update-instructie.
Als u bijvoorbeeld met een shard-verzameling die is geshard op de "country"
sleutel, alle documenten met het veld "city" = "NYC"
wilt verwijderen, moet de toepassing de bewerking uitvoeren voor alle shardsleutelwaarden ("country"
) als de functie voor opnieuw proberen schrijfbewerkingen is ingeschakeld.
db.coll.deleteMany({"country": "USA", "city": "NYC"})
- Succesdb.coll.deleteMany({"city": "NYC"})
- Mislukt met fout ShardKeyNotFound(61)
Notitie
Schrijfbewerkingen die opnieuw kunnen worden uitgevoerd, bieden op dit moment geen ondersteuning voor bulksgewijs niet-geordende schrijfbewerkingen. Als u bulksgewijs schrijfbewerkingen wilt uitvoeren waarvoor schrijfbewerkingen opnieuw kunnen worden uitgevoerd, voert u bulksgewijs geordende schrijfbewerkingen uit.
Als u de functie wilt inschakelen, voegt u de mogelijkheid EnableMongoRetryableWrites toe aan uw databaseaccount. Deze functie kan ook worden ingeschakeld op het tabblad Functies in Azure Portal.
Sharding
Azure Cosmos DB biedt ondersteuning voor automatische sharding aan serverzijde. Het beheert automatisch het maken, plaatsen en verdelen van shards. Azure Cosmos DB biedt geen ondersteuning voor handmatige sharding-opdrachten, wat betekent dat u geen opdrachten zoals addShard
, balancerStart
en moveChunk
. U moet de shardsleutel alleen opgeven wanneer u de containers maakt of de gegevens opvraagt.
Sessies
Azure Cosmos DB biedt nog geen ondersteuning voor opdrachten voor sessies aan de serverzijde.
Time to Live
Azure Cosmos DB ondersteunt een Time to Live (TTL) die is gebaseerd op het tijdstempel van het document. U kunt TTL inschakelen voor een verzameling in Azure Portal.
Aangepaste TTL
Deze functie biedt de mogelijkheid om een aangepaste TTL in te stellen voor elk veld in een verzameling.
Voor een verzameling waarvoor TTL is ingeschakeld voor een veld:
Acceptabele typen zijn het BSON-gegevenstype en numerieke typen (geheel getal, lang of dubbel), die worden geïnterpreteerd als een Unix milliseconden tijdstempel om de vervaldatum te bepalen.
Als het TTL-veld een matrix is, wordt het kleinste element van de matrix van een acceptabel type beschouwd als verlopen van documenten.
Als het TTL-veld ontbreekt in een document, verloopt het document niet.
Als het TTL-veld geen acceptabel type is, verloopt het document niet.
Beperkingen van een aangepaste TTL
Er kan slechts één veld in een verzameling een TTL zijn ingesteld.
Met een aangepaste TTL-veldset kan het veld niet worden gebruikt voor het
\_ts
verlopen van documenten.U kunt het
\_ts
veld niet gebruiken.
Configuratie
U kunt een aangepaste TTL inschakelen door de EnableTtlOnCustomPath
mogelijkheid voor het account bij te werken. Meer informatie over het configureren van mogelijkheden.
De TTL instellen
Voer deze opdracht uit om de TTL in te stellen: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
Transacties
Transacties met meerdere documenten worden ondersteund in een niet-geharde verzameling. Transacties met meerdere documenten worden niet ondersteund in verzamelingen of in shard-verzamelingen. De time-out voor transacties is een vaste 5 seconden.
Gebruikers en rollen beheren
Azure Cosmos DB biedt nog geen ondersteuning voor gebruikers en rollen. Azure Cosmos DB biedt echter ondersteuning voor op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) en wachtwoorden en sleutels voor lezen/schrijven en alleen-lezen die kunnen worden verkregen via Azure Portal (op de pagina Verbindingsreeksen ).
Schrijfproblemen
Sommige toepassingen zijn afhankelijk van een schrijfprobleem, waarmee het aantal antwoorden wordt opgegeven dat tijdens een schrijfbewerking is vereist. Vanwege de manier waarop azure Cosmos DB replicatie op de achtergrond verwerkt, zijn alle schrijfbewerkingen standaard quorum. Schrijfprobleem dat is opgegeven door de clientcode, wordt genegeerd. Meer informatie over het gebruik van consistentieniveaus om de beschikbaarheid en prestaties te maximaliseren.
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.
- Wilt u capaciteitsplanning uitvoeren voor een migratie naar Azure Cosmos DB? U kunt informatie over uw bestaande databasecluster gebruiken voor capaciteitsplanning.
- Als u alleen het aantal vCores en servers in uw bestaande databasecluster weet, leest u meer over het schatten van aanvraageenheden met behulp van vCores of vCPU's.
- Als u typische aanvraagtarieven voor uw huidige databaseworkload kent, leest u meer over het schatten van aanvraageenheden met behulp van de Azure Cosmos DB-capaciteitsplanner.