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 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, versleuteling at rest, 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 3.2-versie van accounts het eindpunt in de indeling *.documents.azure.com
heeft.
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 |
No |
find |
Ja |
findAndModify |
Ja |
getLastError |
Ja |
getMore |
Ja |
getPrevError |
No |
insert |
Ja |
parallelCollectionScan |
No |
resetError |
No |
update |
Ja |
Transactieopdrachten
Opdracht | Ondersteund |
---|---|
abortTransaction |
Ja |
commitTransaction |
Ja |
Verificatieopdrachten
Opdracht | Ondersteund |
---|---|
authenticate |
Ja |
getnonce |
Ja |
logout |
Ja |
Beheeropdrachten
Opdracht | Ondersteund |
---|---|
cloneCollectionAsCapped |
Nee |
collMod |
No |
connectionStatus |
No |
convertToCapped |
No |
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 |
No |
dataSize |
No |
dbHash |
No |
dbStats |
Ja |
explain |
Ja |
features |
No |
hostInfo |
Ja |
listDatabases |
Ja |
listCommands |
No |
profiler |
No |
serverStatus |
No |
top |
No |
whatsmyuri |
Ja |
Samenvoegingspijplijn
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 |
Ja |
group |
Ja |
indexStats |
No |
limit |
Ja |
listLocalSessions |
No |
listSessions |
Nr. |
lookup |
Gedeeltelijk |
match |
Ja |
out |
Ja |
project |
Ja |
redact |
Ja |
replaceRoot |
Ja |
replaceWith |
No |
sample |
Ja |
skip |
Ja |
sort |
Ja |
sortByCount |
Ja |
unwind |
Ja |
Notitie
$lookup
biedt nog geen ondersteuning voor de niet-gerelateerde subquery-functie die is geïntroduceerd in serverversie 3.6. Er wordt een foutbericht weergegeven met een bericht met let is not supported
als u probeert de $lookup
operator met let
en pipeline
velden 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 |
Data types
Azure Cosmos DB voor MongoDB ondersteunt documenten die zijn gecodeerd in De BSON-indeling van MongoDB. 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 waarop 4.0+ wordt uitgevoerd, profiteren van optimalisatie.
In een upgradescenario profiteren documenten die vóór de upgrade naar versie 4.0+ zijn geschreven 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.
Het inschakelen van 16 MB kan worden uitgevoerd op het tabblad Functies in Azure Portal of programmatisch door de mogelijkheid EnableMongo16MBDocumentSupport toe te voegen.
U wordt aangeraden het opnieuw proberen aan de serverzijde in te schakelen en jokertekenindexen te voorkomen om ervoor te zorgen dat aanvragen met grotere documenten slagen. Indien nodig kan het verhogen van uw DB/Collection-RU's 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
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 |
No |
Case Insensitive |
No |
Sparse |
No |
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 |
No |
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.
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 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 |
No |
bitsAllClear |
No |
bitsAnyClear |
Nr. |
Georuimtelijke operators
Operator | Ondersteund |
---|---|
$geoWithin |
Ja |
$geoIntersects |
Ja |
$near |
Ja |
$nearSphere |
Ja |
$geometry |
Ja |
$minDistance |
Ja |
$maxDistance |
Ja |
$center |
No |
$centerSphere |
No |
$box |
No |
$polygon |
Nr. |
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 opnieuw proberen
Met opnieuw te proberen schrijfbewerkingen kunnen MongoDB-stuurprogramma's bepaalde schrijfbewerkingen automatisch opnieuw proberen als er een fout is opgetreden, maar resulteert dit 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 'land': als u alle documenten met de veldstad = "NYC"
wilt verwijderen, moet de toepassing de bewerking uitvoeren voor alle waarden van de shardsleutel (land) als schrijfbewerkingen opnieuw kunnen worden uitgevoerd.
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 Shard maken, plaatsen en balanceren. Azure Cosmos DB biedt geen ondersteuning voor handmatige sharding-opdrachten, wat betekent dat u geen opdrachten hoeft aan te roepen, zoals addShard, balancerStart, moveChunk, enzovoort. 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 vanuit Azure Portal.
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 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).
Schrijfprobleem
Sommige toepassingen zijn afhankelijk van een schrijfprobleem, waarmee het aantal antwoorden wordt opgegeven dat tijdens een schrijfbewerking is vereist. 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.
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 alles wat u weet het aantal vCores en servers in uw bestaande databasecluster is, 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 azure Cosmos DB-capaciteitsplanner
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor