Azure Cosmos DB voor MongoDB (serverversie 4.2): 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 Nr.
find Ja
findAndModify Ja
getLastError Ja
getMore Ja
getPrevError Nr.
insert Ja
parallelCollectionScan Nr.
resetError Nr.
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 Nr.
connectionStatus Nr.
convertToCapped Nr.
copydb Nr.
create Ja
createIndexes Ja
currentOp Ja
drop Ja
dropDatabase Ja
dropIndexes Ja
filemd5 Ja
killCursors Ja
killOp Nr.
listCollections Ja
listDatabases Ja
listIndexes Ja
reIndex Ja
renameCollection Nr.

Diagnostics commands

Opdracht Ondersteund
buildInfo Ja
collStats Ja
connPoolStats Nr.
connectionStatus Nr.
dataSize Nr.
dbHash Nr.
dbStats Ja
explain Ja
features Nr.
hostInfo Ja
listDatabases Ja
listCommands Nr.
profiler Nr.
serverStatus Nr.
top Nr.
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 Nr.
bucketAuto Nr.
changeStream Ja
collStats Nr.
count Ja
currentOp Nr.
facet Ja
geoNear Ja
graphLookup Nr.
group Ja
indexStats Nr.
limit Ja
listLocalSessions Nr.
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 worden gemaakt nadat deze functie is ingeschakeld. Wanneer deze functie is ingeschakeld voor uw databaseaccount, kan deze niet 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 Nr.
2dsphere Ja
2d Index Nr.
Hashed Index Nr.

Indexeigenschappen

Opdracht Ondersteund
TTL Ja
Unique Ja
Partial Alleen ondersteund voor unieke indexen
Case Insensitive Nee
Sparse Nr.
Background Ja

Operatoren

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 Nr.
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 Nr.
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 Nr.
bitsAnySet Nr.
bitsAllClear Nr.
bitsAnyClear Nr.

Georuimtelijke operators

Operator Ondersteund
$geoWithin Ja
$geoIntersects Ja
$near Ja
$nearSphere Ja
$geometry Ja
$minDistance Ja
$maxDistance Ja
$center Nr.
$centerSphere Nr.
$box Nr.
$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"}) - Succes
  • db.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, balancerStarten 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 ondersteunt echter op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) en wachtwoorden en sleutels die alleen-lezen en alleen-lezen zijn, die kunnen worden verkregen via Azure Portal (op de pagina Verbinding maken ion Strings).

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