Azure Cosmos DB voor MongoDB (serverversie 4.0): 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 het MongoDB-wireprotocol te volgen.

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, versleuteling in rust, back-ups en nog veel meer.

Ondersteuning voor protocol

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. Wanneer u Azure Cosmos DB voor MongoDB-accounts maakt, hebben de 3.6+-versies van accounts het eindpunt in de indeling *.mongo.cosmos.azure.com , terwijl de versie 3.2 van accounts het eindpunt in de indeling *.documents.azure.comheeft.

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.

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:

Opdrachten voor query- en schrijfbewerkingen

Opdracht 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

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 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

Diagnostics commands

Opdracht Ondersteund
buildInfo Ja
collStats Ja
connPoolStats Nee
connectionStatus Nee
dataSize Nee
dbHash Nee
dbStats Ja
explain Ja
features Nee
hostInfo Ja
listDatabases Ja
listCommands Nee
profiler Nee
serverStatus Nee
top Nee
whatsmyuri Ja

Samenvoegingspijplijn

Samenvoegingsopdrachten

Opdracht Ondersteund
aggregate Ja
count Ja
distinct Ja
mapReduce Nee

Samenvoegingsfasen

Opdracht Ondersteund
addFields Ja
bucket Nee
bucketAuto Nee
changeStream Ja
collStats Nee
count Ja
currentOp Nee
facet Ja
geoNear Ja
graphLookup Ja
group Ja
indexStats Nee
limit Ja
listLocalSessions Nee
listSessions Nee
lookup Gedeeltelijk
match Ja
out Ja
project Ja
redact Ja
replaceRoot Ja
replaceWith Nee
sample Ja
skip Ja
sort Ja
sortByCount Ja
unwind Ja

Notitie

$lookup biedt nog geen ondersteuning voor de functie voor niet-gerelateerde subquery's die is geïntroduceerd in serverversie 3.6. U ontvangt een foutbericht met een bericht waarin wordt opgegeven let is not supported of u de $lookup operator met let velden en pipeline probeert te gebruiken.

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
sqrt Ja
subtract Ja
trunc 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
$$CURRENT Ja
$$DESCEND Ja
$$KEEP 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

Gegevenstypen

Azure Cosmos DB voor MongoDB ondersteunt documenten die zijn gecodeerd in de MongoDB BSON-indeling. De 4.0 API-versie verbetert 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 met 4.0+ profiteren van optimalisatie.

In een upgradescenario profiteren documenten die zijn geschreven vóór de upgrade naar versie 4.0+ niet van de verbeterde prestaties totdat ze zijn 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.

U kunt 16 MB inschakelen op het tabblad Functies in de Azure Portal of programmatisch door de mogelijkheid 'EnableMongo16MBDocumentSupport' toe te voegen.

We raden u aan om opnieuw proberen aan de serverzijde in te schakelen en jokertekenindexen te vermijden om ervoor te zorgen dat aanvragen met grotere documenten slagen. Indien nodig kan het verhogen van uw DATABASE/verzameling-RU's ook de prestaties helpen.

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

Indexen

Opdracht Ondersteund
Single Field Index Ja
Compound Index Ja
Multikey Index Ja
Text Index Nee
2dsphere Ja
2d Index Nee
Hashed Index Nee

Indexeigenschappen

Opdracht Ondersteund
TTL Ja
Unique Ja
Partial Nee
Case Insensitive Nee
Sparse Nee
Background Ja

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 Nee
mod Ja
regex Ja
text Nee (niet ondersteund. Gebruik in plaats daarvan $regex.)
where Nee

In de $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 het nodig is om '$' of '|' op te nemen, 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 matrices

Opdracht Ondersteund
all Ja
elemMatch Ja
size Ja

Operator voor opmerkingen

Opdracht Ondersteund
comment Ja

Operators voor projecties

Opdracht Ondersteund
elemMatch Ja
meta Nee
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 Nee
bitsAnySet Nee
bitsAllClear Nee
bitsAnyClear Nee

Georuimtelijke operators

Operator 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 met API voor MongoDB versie 4.0, worden sorteerbewerkingen op één veld en meerdere velden ondersteund. Sorteerbewerkingen op meerdere velden waren een beperking van eerdere wire-protocollen.

Indexeren

De API voor MongoDB ondersteunt verschillende indexen om sorteren op meerdere velden mogelijk te maken, queryprestaties te verbeteren en uniekheid af te dwingen.

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 is uitgebreid om tevens globale replicatie met een lage latentie te bereiken. Azure Cosmos DB biedt geen ondersteuning voor handmatige replicatieopdrachten.

Schrijfbewerkingen die opnieuw kunnen worden geprobeerd

Met schrijfbewerkingen die opnieuw kunnen worden geprobeerd, kunnen MongoDB-stuurprogramma's automatisch bepaalde schrijfbewerkingen opnieuw proberen als er een fout is opgetreden, maar dit resulteert in strengere vereisten voor bepaalde bewerkingen, die overeenkomen met de mongoDB-protocolvereisten. Als deze functie is ingeschakeld, moeten bijwerkbewerkingen, inclusief verwijderingen, in shardverzamelingen de shardsleutel worden opgenomen in het queryfilter of de update-instructie.

Bijvoorbeeld met een shard-verzameling, sharded op de sleutel 'land': als u alle documenten met de plaats = "NYC" van het veld wilt verwijderen, moet de toepassing de bewerking uitvoeren voor alle waarden van de shardsleutel (land) als schrijfbewerkingen voor opnieuw proberen zijn 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 geprobeerd, bieden op dit moment geen ondersteuning voor bulksgewijs ongeordenen schrijfbewerkingen. Als u bulksgewijs schrijven wilt uitvoeren met schrijfbewerkingen die opnieuw kunnen worden geprobeerd, 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 de Azure Portal.

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 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.

Sessies

Azure Cosmos DB biedt nog geen ondersteuning voor opdrachten voor sessies aan de serverzijde.

TTL (time-to-live)

Azure Cosmos DB ondersteunt een time-to-live (TTL) op basis van de tijdstempel van het document. TTL kan worden ingeschakeld voor verzamelingen van de Azure Portal.

Transacties

Transacties met meerdere documenten worden ondersteund binnen een niet-geharde verzameling. Transacties met meerdere documenten worden niet ondersteund in verzamelingen of in shardverzamelingen. De time-out voor transacties is een vaste 5 seconden.

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).

Schrijfprobleem

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, 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.

Volgende stappen