Dela via


Funktioner och syntax som stöds i Azure Cosmos DB för MongoDB 4.0-serverversion

Med Azure Cosmos DB för MongoDB 4.0 kan du använda välbekanta MongoDB-funktioner med funktioner i företagsklass som global distribution, automatisk horisontell partitionering och hög tillgänglighet. I den här artikeln beskrivs vilka funktioner, syntax och fördelar som stöds med att använda Azure Cosmos DB för MongoDB 4.0.

Protokollstöd

De operatorer som stöds och eventuella begränsningar eller undantag visas här. Alla klientdrivrutiner som förstår dessa protokoll bör kunna ansluta till Azure Cosmos DB för MongoDB. När du skapar Azure Cosmos DB för MongoDB-konton har 3,6+ versioner av konton slutpunkten i formatet *.mongo.cosmos.azure.com medan 3.2-versionen av konton har slutpunkten i formatet *.documents.azure.com.

Kommentar

Den här artikeln visar endast serverkommandon som stöds och exkluderar omslutningsfunktioner på klientsidan. Omslutningsfunktioner på klientsidan, till exempel deleteMany() och updateMany() internt, använder kommandona delete() och update() server. Funktioner som använder serverkommandon som stöds är kompatibla med Azure Cosmos DB för MongoDB.

Stöd för frågespråk

Azure Cosmos DB for MongoDB ger omfattande stöd för MongoDB-frågespråkskonstruktioner. Här hittar du en detaljerad lista över åtgärder som stöds för närvarande, operatorer, steg, kommandon och alternativ.

Databaskommandon

Azure Cosmos DB for MongoDB stöder följande databaskommandon:

Fråga och skriv-åtgärdskommandon

Stöds
change streams Ja
delete Ja
eval ✖️ Nej
find Ja
findAndModify Ja
getLastError Ja
getMore Ja
getPrevError ✖️ Nej
insert Ja
parallelCollectionScan ✖️ Nej
resetError ✖️ Nej
update Ja

Transaktionskommandon

Stöds
abortTransaction Ja
commitTransaction Ja

Autentiseringskommandon

Stöds
authenticate Ja
getnonce Ja
logout Ja

Administrationskommandon

Stöds
cloneCollectionAsCapped ✖️ Nej
collMod ✖️ Nej
connectionStatus ✖️ Nej
convertToCapped ✖️ Nej
copydb ✖️ Nej
create Ja
createIndexes Ja
currentOp Ja
drop Ja
dropDatabase Ja
dropIndexes Ja
filemd5 Ja
killCursors Ja
killOp ✖️ Nej
listCollections Ja
listDatabases Ja
listIndexes Ja
reIndex Ja
renameCollection ✖️ Nej

Diagnostiska kommandon

Stöds
buildInfo Ja
collStats Ja
connPoolStats ✖️ Nej
connectionStatus ✖️ Nej
dataSize ✖️ Nej
dbHash ✖️ Nej
dbStats Ja
explain Ja
features ✖️ Nej
hello Ja
hostInfo Ja
listDatabases Ja
listCommands ✖️ Nej
profiler ✖️ Nej
serverStatus ✖️ Nej
top ✖️ Nej
whatsmyuri Ja

Sammansättningspipeline

Sammansättningskommandon

Stöds
aggregate Ja
count Ja
distinct Ja
mapReduce ✖️ Nej

Sammansättningsfaser

Stöds
addFields Ja
bucket ✖️ Nej
bucketAuto ✖️ Nej
changeStream Ja
collStats ✖️ Nej
count Ja
currentOp ✖️ Nej
facet Ja
geoNear Ja
graphLookup Ja
group Ja
indexStats ✖️ Nej
limit Ja
listLocalSessions ✖️ Nej
listSessions ✖️ Nej
lookup ❓Partiell
match Ja
out Ja
project Ja
redact Ja
replaceRoot Ja
replaceWith ✖️ Nej
sample Ja
skip Ja
sort Ja
sortByCount Ja
unwind Ja

Kommentar

$lookup har ännu inte stöd för funktionen för okorrigering av underfrågor som introducerades i serverversion 3.6. Du får ett felmeddelande med ett meddelande som innehåller let is not supported om du försöker använda operatorn $lookup med let och pipeline fält.

Booleska uttryck

Stöds
and Ja
not Ja
or Ja

Konverteringsuttryck

Stöds
convert Ja
toBool Ja
toDate Ja
toDecimal Ja
toDouble Ja
toInt Ja
toLong Ja
toObjectId Ja
toString Ja

Uttryck för angivelse

Stöds
setEquals Ja
setIntersection Ja
setUnion Ja
setDifference Ja
setIsSubset Ja
anyElementTrue Ja
allElementsTrue Ja

Jämförelseuttryck

Kommentar

API:et för MongoDB stöder inte jämförelseuttryck med en matrisliteral i frågan.

Stöds
cmp Ja
eq Ja
gt Ja
gte Ja
lt Ja
lte Ja
ne Ja
in Ja
nin Ja

Aritmetiska uttryck

Stöds
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

Stränguttryck

Stöds
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

Textsökningsoperator

Stöds
meta ✖️ Nej

Matrisuttryck

Stöds
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

Variabeloperatorer

Stöds
map Ja
let Ja

Systemvariabler

Stöds
$$CURRENT Ja
$$DESCEND Ja
$$KEEP Ja
$$PRUNE Ja
$$REMOVE Ja
$$ROOT Ja

Literaloperator

Stöds
literal Ja

Datumuttryck

Stöds
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

Villkorliga uttryck

Stöds
cond Ja
ifNull Ja
switch Ja

Datatypsoperator

Stöds
type Ja

Ackumulatoruttryck

Stöds
sum Ja
avg Ja
first Ja
last Ja
max Ja
min Ja
push Ja
addToSet Ja
stdDevPop Ja
stdDevSamp Ja

Kopplingsoperator

Stöds
mergeObjects Ja

Datatyper

Azure Cosmos DB for MongoDB stöder dokument som kodas i BSON-format (MongoDB binary JSON). 4.0 API-versionen förbättrar den interna användningen av det här formatet för att förbättra prestanda och minska kostnaderna. Dokument som skrivits eller uppdaterats via en slutpunkt som kör 4.0+ drar nytta av optimering.

I ett uppgraderingsscenario till version 4.0 eller senare drar dokument som skapats före uppgraderingen inte omedelbart nytta av den förbättrade prestandan. Om du vill dra nytta av förbättringarna uppdaterar du dokumenten via en skrivåtgärd med hjälp av 4.0-slutpunkten.

Stöd för 16 MB dokument höjer storleksgränsen för dokument från 2 MB till 16 MB. Den här gränsen gäller endast för samlingar som skapats när funktionen har aktiverats. När du har aktiverat den här funktionen för ett databaskonto kan den inte inaktiveras.

Du kan aktivera 16 MB på fliken Funktioner i Azure-portalen eller programmatiskt genom att lägga till EnableMongo16MBDocumentSupport funktionen.

Vi rekommenderar att du aktiverar återförsök på serversidan och undviker jokerteckenindex för att säkerställa att begäranden med större dokument lyckas. Om det behövs kan det också hjälpa prestanda att höja databasen eller insamlingsbegärandeenheterna.

Stöds
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

Index och indexegenskaper

Index

Stöds
Single Field Index Ja
Compound Index Ja
Multikey Index Ja
Text Index ✖️ Nej
2dsphere Ja
2d Index ✖️ Nej
Hashed Index ✖️ Nej

Indexegenskaper

Stöds
TTL Ja
Unique Ja
Partial ✖️ Nej
Case Insensitive ✖️ Nej
Sparse ✖️ Nej
Background Ja

Operatorer

Logiska operatorer

Stöds
or Ja
and Ja
not Ja
nor Ja

Elementoperatorer

Stöds
exists Ja
type Ja

Frågeoperatorer för utvärdering

Stöds
expr Ja
jsonSchema ✖️ Nej
mod Ja
regex Ja
text ✖️ Nej
where ✖️ Nej

I de $regex frågorna tillåter vänsteranknerade uttryck indexsökning. Om du använder i modifierare (skiftlägesokänslighet) och m modifierare (flera ledningar) orsakas dock insamlingsgenomsökningen i alla uttryck.

När det finns ett behov av att inkludera $ eller |är det bäst att skapa två (eller flera) regex-frågor. Med tanke på följande ursprungliga fråga: find({x:{$regex: /^abc$/})måste den till exempel ändras på följande sätt:

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

Den första delen använder indexet för att begränsa sökningen till de dokument som börjar med ^abc och den andra delen matchar de exakta posterna. Stapeloperatorn | fungerar som en "eller"-funktion – frågan find({x:{$regex: /^abc |^def/}) matchar dokumenten där fältet x har värden som börjar med "abc" eller "def". Om du vill använda indexet delar du upp frågan i två olika frågor som är kopplade till $or-operatorn: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Tips/Råd

Kommandot text stöds inte. Använd $regex i stället.

Matrisoperatorer

Stöds
all Ja
elemMatch Ja
size Ja

Kommentarsoperator

Stöds
comment Ja

Projektionsoperatorer

Stöds
elemMatch Ja
meta ✖️ Nej
slice Ja

Uppdateringsoperatorer

Fältuppdateringsoperatorer

Stöds
inc Ja
mul Ja
rename Ja
setOnInsert Ja
set Ja
unset Ja
min Ja
max Ja
currentDate Ja

Matrisuppdateringsoperatorer

Stöds
$ Ja
$[] Ja
$[\<identifier\>] Ja
addToSet Ja
pop Ja
pullAll Ja
pull Ja
push Ja
pushAll Ja

Uppdatera modifierare

Stöds
each Ja
slice Ja
sort Ja
position Ja

Binär uppdateringsoperator

Stöds
bit Ja
bitsAllSet ✖️ Nej
bitsAnySet ✖️ Nej
bitsAllClear ✖️ Nej
bitsAnyClear ✖️ Nej

Geospatiala operatorer

Stöds
$geoWithin Ja
$geoIntersects Ja
$near Ja
$nearSphere Ja
$geometry Ja
$minDistance Ja
$maxDistance Ja
$center ✖️ Nej
$centerSphere ✖️ Nej
$box ✖️ Nej
$polygon ✖️ Nej

Sorteringsåtgärder

När du använder findOneAndUpdate åtgärden med API för MongoDB version 4.0 stöds sorteringsåtgärder i ett enda fält och flera fält. Sorteringsåtgärder på flera fält var en begränsning för tidigare trådprotokoll.

Indexering

API:et för MongoDB stöder olika index för att aktivera sortering på flera fält, förbättra frågeprestanda och framtvinga unikhet.

GridFS

Azure Cosmos DB stöder GridFS via valfri GridFS-kompatibel Mongo-drivrutin.

Replikering

Azure Cosmos DB stöder automatisk, inbyggd replikering på de understa lagren. Denna logik utökas för att även uppnå global replikering med låga svarstider. Azure Cosmos DB stöder inte manuella replikeringskommandon.

Återförsöksbara skrivningar

Återförsöksbara skrivningar gör det möjligt för MongoDB-drivrutiner att automatiskt försöka utföra vissa skrivåtgärder igen om det uppstod ett fel, men resulterar i strängare krav för vissa åtgärder som matchar MongoDB-protokollkraven. Med den här funktionen aktiverad kräver uppdateringsåtgärder, inklusive borttagningar, i fragmenterade samlingar att shardnyckeln inkluderas i frågefiltret eller uppdateringsinstruktionen.

Med till exempel en fragmenterad samling, shardad på nyckeln region: Om du vill ta bort alla dokument med fältet city = "NYC"måste programmet köra åtgärden för alla värden för shardnyckel (region) om återförsöksbara skrivningar är aktiverade.

  • db.coll.deleteMany({"region": "USA", "city": "NYC"}) – Lyckas med meddelandet Success
  • db.coll.deleteMany({"city": "NYC"}) – Misslyckas med fel ShardKeyNotFound(61)

Kommentar

Återförsöksbara skrivningar stöder inte mass osorterade skrivningar just nu. Om du vill utföra massskrivningar med återförsöksbara skrivningar aktiverade utför du massordade skrivningar.

Om du vill aktivera funktionen lägger du till funktionen EnableMongoRetryableWrites i ditt databaskonto. Den här funktionen kan också aktiveras på fliken Funktioner i Azure Portal.

Horisontell partitionering

Azure Cosmos DB stöder automatisk, horisontell partitionering på serversidan. Den hanterar skapande, placering och balansering av fragment automatiskt. Azure Cosmos DB stöder inte manuella partitioneringskommandon, vilket innebär att du inte behöver anropa kommandon som addShard, balancerStartoch moveChunk. Du behöver bara ange shardnyckeln när du skapar containrarna eller frågar efter data.

Sessioner

Azure Cosmos DB har ännu inte stöd för sessionskommandon på serversidan.

TTL-värde (time to live)

Azure Cosmos DB stöder en TTL (time-to-live) baserat på tidsstämpeln för dokumentet. TTL kan aktiveras för samlingar från Azure Portal.

Transaktioner

Transaktioner med flera dokument stöds i en ohardad samling. Transaktioner med flera dokument stöds inte i samlingar eller i fragmenterade samlingar. Tidsgränsen för transaktioner är fasta 5 sekunder.

Användar- och rollhantering

Azure Cosmos DB har ännu inte stöd för användare och roller. Azure Cosmos DB har dock stöd för rollbaserad åtkomstkontroll i Azure och skrivskyddade och skrivskyddade lösenord/nycklar som kan hämtas via Azure-portalen (sidan Anslutningssträng).

Skrivanmärkningar

Vissa program förlitar sig på ett skrivproblem, som anger antalet svar som krävs under en skrivåtgärd. På grund av hur Azure Cosmos DB hanterar replikering i bakgrunden är alla skrivningar automatiskt kvorum som standard. Skrivanmärkningar som anges av klientkoden ignoreras. Läs mer om hur du maximerar tillgänglighet och prestanda med hjälp av konsekvensnivåer.