Azure Cosmos DB voor MongoDB (serverversie 4.0): ondersteunde functies en syntaxis
Artikel
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.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:
$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
Nee
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
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 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"}) - 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 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.
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.