Delen via


Ondersteunde functies en syntaxis in Azure Cosmos DB voor MongoDB 4.2-serverversie

Met Azure Cosmos DB voor MongoDB 4.2 kunt u vertrouwde MongoDB-functies gebruiken met hoogwaardige mogelijkheden, zoals wereldwijde distributie, automatische sharding en hoge beschikbaarheid. In dit artikel worden de ondersteunde functies, syntaxis en voordelen van het gebruik van Azure Cosmos DB voor MongoDB 4.2 beschreven.

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

Ondersteund
change streams ✅ Ja
delete ✅ Ja
eval ✖️ Nee
find ✅ Ja
findAndModify ✅ Ja
getLastError ✅ Ja
getMore ✅ Ja
getPrevError ✖️ Nee
insert ✅ Ja
parallelCollectionScan ✖️ Nee
resetError ✖️ Nee
update ✅ Ja

Transactieopdrachten

Notitie

Transacties met meerdere documenten worden alleen ondersteund binnen één niet-geharde verzameling. Transacties tussen meerdere documenten en meerdere shards worden nog niet ondersteund in de API voor MongoDB.

Ondersteund
abortTransaction ✅ Ja
commitTransaction ✅ Ja

Verificatieopdrachten

Ondersteund
authenticate ✅ Ja
getnonce ✅ Ja
logout ✅ Ja

Beheeropdrachten

Ondersteund
cloneCollectionAsCapped ✖️ Nee
collMod ✖️ Nee
connectionStatus ✖️ Nee
convertToCapped ✖️ Nee
copydb ✖️ Nee
create ✅ Ja
createIndexes ✅ Ja
currentOp ✅ Ja
drop ✅ Ja
dropDatabase ✅ Ja
dropIndexes ✅ Ja
filemd5 ✅ Ja
killCursors ✅ Ja
killOp ✖️ Nee
listCollections ✅ Ja
listDatabases ✅ Ja
listIndexes ✅ Ja
reIndex ✅ Ja
renameCollection ✖️ Nee

Diagnostische opdrachten

Ondersteund
buildInfo ✅ Ja
collStats ✅ Ja
connPoolStats ✖️ Nee
connectionStatus ✖️ Nee
dataSize ✖️ Nee
dbHash ✖️ Nee
dbStats ✅ Ja
explain ✅ Ja
features ✖️ Nee
hello ✅ Ja
hostInfo ✅ Ja
listDatabases ✅ Ja
listCommands ✖️ Nee
profiler ✖️ Nee
serverStatus ✖️ Nee
top ✖️ Nee
whatsmyuri ✅ Ja

Samenvoegingspijplijn

Azure Cosmos DB voor MongoDB ondersteunt de volgende aggregatieopdrachten.

Samenvoegingsopdrachten

Ondersteund
aggregate ✅ Ja
count ✅ Ja
distinct ✅ Ja
mapReduce ✖️ Nee

Samenvoegingsfasen

Ondersteund
addFields ✅ Ja
bucket ✖️ Nee
bucketAuto ✖️ Nee
changeStream ✅ Ja
collStats ✖️ Nee
count ✅ Ja
currentOp ✖️ Nee
facet ✅ Ja
geoNear ✅ Ja
graphLookup ✖️ Nee
group ✅ Ja
indexStats ✖️ Nee
limit ✅ Ja
listLocalSessions ✖️ Nee
listSessions ✖️ Nee
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 geen ondersteuning voor de functie niet-gerelateerde subquery's die is geïntroduceerd in serverversie 3.6. Het gebruik van de $lookup operator met de let velden resulteert pipeline in een foutbericht dat aangeeft dat 'let niet wordt ondersteund'.

Booleaanse expressies

Ondersteund
and ✅ Ja
not ✅ Ja
or ✅ Ja

Conversie-expressies

Ondersteund
convert ✅ Ja
toBool ✅ Ja
toDate ✅ Ja
toDecimal ✅ Ja
toDouble ✅ Ja
toInt ✅ Ja
toLong ✅ Ja
toObjectId ✅ Ja
toString ✅ Ja

Expressies voor instellen

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.

Ondersteund
cmp ✅ Ja
eq ✅ Ja
gt ✅ Ja
gte ✅ Ja
lt ✅ Ja
lte ✅ Ja
ne ✅ Ja
in ✅ Ja
nin ✅ Ja

Rekenkundige expressies

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

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

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

Ondersteund
meta ✖️ Nee

Matrixexpressies

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

Ondersteund
map ✅ Ja
let ✅ Ja

Systeemvariabelen

Ondersteund
$$CLUSTERTIME ✅ Ja
$$CURRENT ✅ Ja
$$DESCEND ✅ Ja
$$KEEP ✅ Ja
$$NOW ✅ Ja
$$PRUNE ✅ Ja
$$REMOVE ✅ Ja
$$ROOT ✅ Ja

Letterlijke operator

Ondersteund
literal ✅ Ja

Datumexpressies

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

Ondersteund
cond ✅ Ja
ifNull ✅ Ja
switch ✅ Ja

Operator voor gegevenstype

Ondersteund
type ✅ Ja

Accumulatorexpressies

Ondersteund
sum ✅ Ja
avg ✅ Ja
first ✅ Ja
last ✅ Ja
max ✅ Ja
min ✅ Ja
push ✅ Ja
addToSet ✅ Ja
stdDevPop ✅ Ja
stdDevSamp ✅ Ja

Operator voor samenvoegen

Ondersteund
mergeObjects ✅ Ja

Gegevenstypen

Azure Cosmos DB voor MongoDB ondersteunt documenten die zijn gecodeerd in de binaire JSON-indeling van MongoDB. 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 naar versie 4.0 of hoger profiteren documenten die zijn gemaakt vóór de upgrade niet onmiddellijk van de verbeterde prestaties. Als u wilt profiteren van de verbeteringen, werkt u deze documenten bij via een schrijfbewerking met behulp van het 4.0-eindpunt.

Ondersteuning voor documenten van 16 MB verhoogt de maximale grootte voor documenten van 2 MB tot 16 MB. Deze limiet geldt alleen voor verzamelingen die zijn gemaakt nadat de functie is ingeschakeld. Nadat u deze functie voor een databaseaccount hebt ingeschakeld, 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.

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

Ondersteund
Single Field Index ✅ Ja
Compound Index ✅ Ja
Multikey Index ✅ Ja
Text Index ✖️ Nee
2dsphere ✅ Ja
2d Index ✖️ Nee
Hashed Index ✖️ Nee

Indexeigenschappen

Ondersteund
TTL ✅ Ja
Unique ✅ Ja
Partial ❓Gedeeltelijk
Case Insensitive ✖️ Nee
Sparse ✖️ Nee
Background ✅ Ja

Aanbeveling

Partial wordt alleen ondersteund voor unieke indexen.

Operators

Azure Cosmos DB voor MongoDB ondersteunt de volgende operators.

Logische operators

Ondersteund
or ✅ Ja
and ✅ Ja
not ✅ Ja
nor ✅ Ja

Operators voor elementen

Ondersteund
exists ✅ Ja
type ✅ Ja

Operators voor evaluatiequery's

Ondersteund
expr ✅ Ja
jsonSchema ✖️ Nee
mod ✅ Ja
regex ✅ Ja
text ✖️ Nee
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, splitst u de query op in twee afzonderlijke query's en voegt u deze samen met de $or operator: find({$or: [{x: {$regex: /^abc/}}, {x: {$regex: /^def/}}]}).

Aanbeveling

De text opdracht wordt niet ondersteund. Gebruik in plaats daarvan $regex.

Operators voor matrices

Ondersteund
all ✅ Ja
elemMatch ✅ Ja
size ✅ Ja

Operator voor opmerkingen

Ondersteund
comment ✅ Ja

Operators voor projecties

Ondersteund
elemMatch ✅ Ja
meta ✖️ Nee
slice ✅ Ja

Operators voor updates

Operators voor veldupdates

Ondersteund
inc ✅ Ja
mul ✅ Ja
rename ✅ Ja
setOnInsert ✅ Ja
set ✅ Ja
unset ✅ Ja
min ✅ Ja
max ✅ Ja
currentDate ✅ Ja

Operators voor matrixupdates

Ondersteund
$ ✅ Ja
$[] ✅ Ja
$[\<identifier\>] ✅ Ja
addToSet ✅ Ja
pop ✅ Ja
pullAll ✅ Ja
pull ✅ Ja
push ✅ Ja
pushAll ✅ Ja

Aanpassingsfuncties voor bijwerken

Ondersteund
each ✅ Ja
slice ✅ Ja
sort ✅ Ja
position ✅ Ja

Operators voor bitwise-updates

Ondersteund
bit ✅ Ja
bitsAllSet ✖️ Nee
bitsAnySet ✖️ Nee
bitsAllClear ✖️ Nee
bitsAnyClear ✖️ Nee

Georuimtelijke operators

Ondersteund
$geoWithin ✅ Ja
$geoIntersects ✅ Ja
$near ✅ Ja
$nearSphere ✅ Ja
$geometry ✅ Ja
$minDistance ✅ Ja
$maxDistance ✅ Ja
$center ✖️ Nee
$centerSphere ✖️ Nee
$box ✖️ Nee
$polygon ✖️ Nee

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 werkt met Azure Cosmos DB voor MongoDB. Expliciete versleuteling, waarbij het stuurprogramma elk veld tijdens schrijfbewerkingen versleutelt, wordt ondersteund. Automatische versleuteling wordt niet ondersteund. Expliciete ontsleuteling en automatische ontsleuteling worden 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.

Bijvoorbeeld, met een shard-verzameling, sharded op sleutel region: als u alle documenten met het veld city = "NYC"wilt verwijderen, moet de toepassing de bewerking uitvoeren voor alle waarden van de shardsleutel (regio) als schrijfbewerkingen opnieuw kunnen worden uitgevoerd.

  • db.coll.deleteMany({"region": "USA", "city": "NYC"}) - Slaagt met bericht Success
  • db.coll.deleteMany({"city": "NYC"}) - Mislukt met fout ShardKeyNotFound(61)

Notitie

De functie voor opnieuw proberende schrijfbewerkingen biedt op dit moment geen ondersteuning voor bulksgewijze 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.

Levensduur

Azure Cosmos DB biedt een TTL-functie (Time to Live) op basis van het tijdstempel van het document. Schakel TTL in voor een verzameling in Azure Portal.

Aangepaste TTL

Met deze functie kunt u een aangepaste TTL-waarde opgeven voor één veld in een verzameling. Documenten verlopen op basis van de waarde van dit veld.

Voor een verzameling waarvoor TTL is ingeschakeld voor een veld:

  • Acceptabele typen zijn het binaire JSON-gegevenstype (BSON) 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 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. Azure Cosmos DB negeert schrijfprobleem dat is opgegeven door clientcode. Meer informatie over het gebruik van consistentieniveaus om de beschikbaarheid en prestaties te maximaliseren.