適用於 MongoDB 的 Azure Cosmos DB (6.0 伺服器版本):支援的功能和語法
適用於: MongoDB
Azure Cosmos DB 是 Microsoft 的全域分散式多模型資料庫服務。 Azure Cosmos DB 提供 多個資料庫 API。 您可以使用任何開放原始碼 MongoDB 用戶端驅動程式,與 Azure Cosmos DB for MongoDB 通訊。 Azure Cosmos DB for MongoDB 依照 MongoDB 有線通訊協定,支援使用現有的用戶端驅動程式。
使用 Azure Cosmos DB for MongoDB 可讓您享有既有的 MongoDB 權益,以及 Azure Cosmos DB 提供的所有企業功能:全域散發、自動分區化、可用性和延遲保證、待用加密、備份等等。
通訊協定支援
本文會列出支援的運算子及任何限制或例外狀況。 任何了解這些通訊協定的用戶端驅動程式,都應能夠連線至 Azure Cosmos DB for MongoDB。 當您建立 Azure Cosmos DB for MongoDB 時,3.6 以上版本的帳戶具有格式為 *.mongo.cosmos.azure.com
的端點。 3.2 版的帳戶具有格式為 *.documents.azure.com
的端點。
注意
本文僅列出支援的伺服器命令,不包括用戶端包裝函式。 deleteMany()
和 updateMany()
等用戶端包裝函式會在內部使用 delete()
和 update()
伺服器命令。 使用支援伺服器命令的函式與 Azure Cosmos DB for MongoDB 相容。
查詢語言支援
Azure Cosmos DB for MongoDB 為 MongoDB 查詢語言建構提供全面支援。 下列章節詳細列出目前支援的作業、運算子、階段、命令和選項。
資料庫命令
Azure Cosmos DB for MongoDB 支援下列資料庫命令。
查詢和寫入作業命令
Command | 支援 |
---|---|
change streams |
Yes |
delete |
是 |
eval |
無 |
find |
.是 |
findAndModify |
.是 |
getLastError |
.是 |
getMore |
是 |
getPrevError |
無 |
insert |
.是 |
parallelCollectionScan |
無 |
resetError |
無 |
update |
Yes |
交易命令
注意
單一非分區化集合內僅支援多文件交易。 適用於 MongoDB 的 API 中尚不支援跨集合和跨分區多文件交易。
Command | 支援 |
---|---|
abortTransaction |
Yes |
commitTransaction |
Yes |
驗證命令
Command | 支援 |
---|---|
authenticate |
Yes |
getnonce |
.是 |
logout |
Yes |
系統管理命令
Command | 支援 |
---|---|
cloneCollectionAsCapped |
No |
collMod |
無 |
connectionStatus |
無 |
convertToCapped |
無 |
copydb |
無 |
create |
.是 |
createIndexes |
.是 |
currentOp |
.是 |
drop |
.是 |
dropDatabase |
.是 |
dropIndexes |
.是 |
filemd5 |
.是 |
killCursors |
是 |
killOp |
無 |
listCollections |
.是 |
listDatabases |
.是 |
listIndexes |
.是 |
reIndex |
是 |
renameCollection |
No |
診斷命令
Command | 支援 |
---|---|
buildInfo |
Yes |
collStats |
是 |
connPoolStats |
無 |
connectionStatus |
無 |
dataSize |
無 |
dbHash |
無 |
dbStats |
.是 |
explain |
是 |
features |
無 |
hostInfo |
.是 |
listDatabases |
是 |
listCommands |
無 |
profiler |
無 |
serverStatus |
無 |
top |
無 |
whatsmyuri |
Yes |
彙總管線
Azure Cosmos DB for MongoDB 支援下列彙總命令。
彙總命令
Command | 支援 |
---|---|
aggregate |
Yes |
count |
.是 |
distinct |
是 |
mapReduce |
No |
彙總階段
Command | 支援 |
---|---|
addFields |
是 |
bucket |
無 |
bucketAuto |
無 |
changeStream |
.是 |
collStats |
無 |
count |
.是 |
currentOp |
無 |
facet |
.是 |
geoNear |
是 |
graphLookup |
無 |
group |
.是 |
indexStats |
無 |
limit |
.是 |
listLocalSessions |
無 |
listSessions |
No |
lookup |
Partial |
match |
Yes |
merge |
.是 |
out |
.是 |
planCacheStats |
.是 |
project |
.是 |
redact |
.是 |
regexFind |
.是 |
regexFindAll |
.是 |
regexMatch |
.是 |
replaceRoot |
.是 |
replaceWith |
.是 |
sample |
.是 |
set |
.是 |
skip |
.是 |
sort |
.是 |
sortByCount |
.是 |
unset |
.是 |
unwind |
是 |
注意
$lookup
彙總尚不支援伺服器 3.6 版所引進的不相關子查詢功能。 如果您嘗試使用 $lookup
運算符搭配 let
和 pipeline
欄位,則會出現錯誤訊息,指出 let
不支援。
布林運算式
Command | 支援 |
---|---|
and |
Yes |
not |
.是 |
or |
Yes |
轉換運算式
Command | 支援 |
---|---|
convert |
Yes |
toBool |
.是 |
toDate |
.是 |
toDecimal |
.是 |
toDouble |
.是 |
toInt |
.是 |
toLong |
.是 |
toObjectId |
.是 |
toString |
Yes |
Set expressions
Command | 支援 |
---|---|
setEquals |
Yes |
setIntersection |
.是 |
setUnion |
.是 |
setDifference |
.是 |
setIsSubset |
.是 |
anyElementTrue |
.是 |
allElementsTrue |
Yes |
比較運算式
注意
適用於 MongoDB 的 API 不支援在查詢中使用含有陣列常值的比較運算式。
Command | 支援 |
---|---|
cmp |
Yes |
eq |
.是 |
gt |
.是 |
gte |
.是 |
lt |
.是 |
lte |
.是 |
ne |
.是 |
in |
.是 |
nin |
Yes |
算術運算式
Command | 支援 |
---|---|
abs |
Yes |
add |
.是 |
ceil |
.是 |
divide |
.是 |
exp |
.是 |
floor |
.是 |
ln |
.是 |
log |
.是 |
log10 |
.是 |
mod |
.是 |
multiply |
.是 |
pow |
.是 |
round |
.是 |
sqrt |
.是 |
subtract |
.是 |
trunc |
Yes |
三角運算式
Command | 支援 |
---|---|
acos |
Yes |
acosh |
.是 |
asin |
.是 |
asinh |
.是 |
atan |
.是 |
atan2 |
.是 |
atanh |
.是 |
cos |
.是 |
cosh |
.是 |
degreesToRadians |
.是 |
radiansToDegrees |
.是 |
sin |
.是 |
sinh |
.是 |
tan |
.是 |
tanh |
Yes |
字串運算式
Command | 支援 |
---|---|
concat |
Yes |
indexOfBytes |
.是 |
indexOfCP |
.是 |
ltrim |
.是 |
rtrim |
.是 |
trim |
.是 |
split |
.是 |
strLenBytes |
.是 |
strLenCP |
.是 |
strcasecmp |
.是 |
substr |
.是 |
substrBytes |
.是 |
substrCP |
.是 |
toLower |
.是 |
toUpper |
Yes |
文字搜尋運算子
Command | 支援 |
---|---|
meta |
No |
陣列運算式
Command | 支援 |
---|---|
arrayElemAt |
Yes |
arrayToObject |
.是 |
concatArrays |
.是 |
filter |
.是 |
indexOfArray |
.是 |
isArray |
.是 |
objectToArray |
.是 |
range |
.是 |
reverseArray |
.是 |
reduce |
.是 |
size |
.是 |
slice |
.是 |
zip |
.是 |
in |
Yes |
變數運算子
Command | 支援 |
---|---|
map |
Yes |
let |
Yes |
系統變數
Command | 支援 |
---|---|
$$CLUSTERTIME |
Yes |
$$CURRENT |
.是 |
$$DESCEND |
.是 |
$$KEEP |
.是 |
$$NOW |
.是 |
$$PRUNE |
.是 |
$$REMOVE |
.是 |
$$ROOT |
Yes |
常值運算子
Command | 支援 |
---|---|
literal |
Yes |
日期運算式
Command | 支援 |
---|---|
dayOfYear |
Yes |
dayOfMonth |
.是 |
dayOfWeek |
.是 |
year |
.是 |
month |
.是 |
week |
.是 |
hour |
.是 |
minute |
.是 |
second |
.是 |
millisecond |
.是 |
dateToString |
.是 |
isoDayOfWeek |
.是 |
isoWeek |
.是 |
dateFromParts |
.是 |
dateToParts |
.是 |
dateFromString |
.是 |
isoWeekYear |
Yes |
條件運算式
Command | 支援 |
---|---|
cond |
Yes |
ifNull |
.是 |
switch |
Yes |
資料類型運算子
Command | 支援 |
---|---|
type |
Yes |
累加器運算式
Command | 支援 |
---|---|
sum |
Yes |
avg |
.是 |
first |
.是 |
last |
.是 |
max |
.是 |
min |
.是 |
push |
.是 |
addToSet |
.是 |
stdDevPop |
.是 |
stdDevSamp |
Yes |
合併運算子
Command | 支援 |
---|---|
mergeObjects |
Yes |
資料類型
Azure Cosmos DB for MongoDB 支援以 MongoDB BSON 格式編碼的文件。 4.0 版和更新本 (4.0+) 增強此格式的內部用法,改善效能並降低成本。 透過執行 4.0+ 的端點所撰寫或更新的文件可從此最佳化中獲益。
在升級案例中,升級至 4.0+ 版之前所撰寫的文件,必須透過 4.0+ 端點的寫入作業來更新,才能受益於增強的效能。
16 MB 的文件支援會將文件的大小限制從 2 MB 提高到 16 MB。 這項限制僅適用於啟用此功能之後所建立的集合。 當資料庫帳戶啟用此功能時,就無法停用此功能。
若要啟用 16 MB 的檔案支援,請變更 Azure 入口網站中資源的功能索引標籤標設定,或以程式設計方式新增 EnableMongo16MBDocumentSupport
功能。
我們建議您啟用伺服器端重試,並避免使用萬用字元索引,以確保大型文件中要求成功。 提高資料庫或集合要求單位也可能有助於改善效能。
Command | 支援 |
---|---|
Double |
Yes |
String |
.是 |
Object |
.是 |
Array |
.是 |
Binary Data |
.是 |
ObjectId |
.是 |
Boolean |
.是 |
Date |
.是 |
Null |
.是 |
32-bit Integer (int) |
.是 |
Timestamp |
.是 |
64-bit Integer (long) |
.是 |
MinKey |
.是 |
MaxKey |
.是 |
Decimal128 |
.是 |
Regular Expression |
.是 |
JavaScript |
.是 |
JavaScript (with scope) |
.是 |
Undefined |
Yes |
索引和索引屬性
Azure Cosmos DB for MongoDB 虛擬核心支援以下索引命令和索引屬性。
索引數
Command | 支援 |
---|---|
Single Field Index |
Yes |
Compound Index |
.是 |
Multikey Index |
是 |
Text Index |
無 |
2dsphere |
.是 |
2d Index |
無 |
Hashed Index |
No |
索引屬性
Command | 支援 |
---|---|
TTL |
Yes |
Unique |
Yes |
Partial |
僅支援唯一索引 |
Case Insensitive |
No |
Sparse |
無 |
Background |
Yes |
操作員
Azure Cosmos DB for MongoDB 支援下列運算子。
邏輯運算子
Command | 支援 |
---|---|
or |
Yes |
and |
.是 |
not |
.是 |
nor |
Yes |
元素運算子
Command | 支援 |
---|---|
exists |
Yes |
type |
Yes |
評估查詢運算子
Command | 支援 |
---|---|
expr |
是 |
jsonSchema |
無 |
mod |
.是 |
regex |
Yes |
text |
否 (不支援。請改用 $regex 。) |
where |
No |
在 $regex
查詢中,左側錨點運算式允許索引搜尋。 不過,使用 i
修飾詞 (不區分大小寫) 和 m
修飾詞 (多行) 會在所有運算式中造成集合掃描。
當需要包含 $
或 |
時,最好先建立兩個 (或以上) $regex
查詢。
例如,變更下列原始查詢:
find({x:{$regex: /^abc$/})
成為此查詢:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
修改查詢的第一個部分會使用索引,將搜尋限制為以 ^abc
開頭的文件。 查詢的第二個部分符合確切項目。 條形運算子 (|
) 會做為「or」函數。 查詢 find({x:{$regex: /^abc |^def/})
符合欄位 x
且具有開頭為 abc
或 def
值的文件。 若要利用索引,則建議將查詢分成兩個以 $or
運算子聯結的不同查詢:find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })
。
陣列運算子
Command | 支援 |
---|---|
all |
Yes |
elemMatch |
.是 |
size |
Yes |
註解運算子
Command | 支援 |
---|---|
comment |
Yes |
投射運算子
Command | 支援 |
---|---|
elemMatch |
是 |
meta |
無 |
slice |
Yes |
更新運算子
欄位更新運算子
Command | 支援 |
---|---|
inc |
Yes |
mul |
.是 |
rename |
.是 |
setOnInsert |
.是 |
set |
.是 |
unset |
.是 |
min |
.是 |
max |
.是 |
currentDate |
Yes |
陣列更新運算子
Command | 支援 |
---|---|
$ |
Yes |
$[] |
.是 |
$[\<identifier\>] |
.是 |
addToSet |
.是 |
pop |
.是 |
pullAll |
.是 |
pull |
.是 |
push |
.是 |
pushAll |
Yes |
更新修飾詞
Command | 支援 |
---|---|
each |
Yes |
slice |
.是 |
sort |
.是 |
position |
Yes |
位元更新運算子
Command | 支援 |
---|---|
bit |
是 |
bitsAllSet |
無 |
bitsAnySet |
無 |
bitsAllClear |
無 |
bitsAnyClear |
No |
地理空間運算子
運算子 | 支援 |
---|---|
$geoWithin |
Yes |
$geoIntersects |
.是 |
$near |
.是 |
$nearSphere |
.是 |
$geometry |
.是 |
$minDistance |
.是 |
$maxDistance |
是 |
$center |
無 |
$centerSphere |
無 |
$box |
無 |
$polygon |
No |
排序作業
當您使用 findOneAndUpdate
作業時,支援單一欄位上的排序作業。 不支援多個欄位的排序作業。
編製索引
適用於 MongoDB 的 API 支援各種不同的索引,可讓您依多個欄位排序、改善查詢效能及強制執行唯一性。
用戶端欄位層級加密
用戶端層級欄位加密是驅動程式功能,且與適用於 MongoDB 的 API 相容。 支援明確加密,也就是驅動程式在寫入每個欄位時會明確加密。 不支援自動加密。 支援明確解密和自動解密。
不應該執行 mongocryptd
,因為它不是任何支援作業的必要項目。
GridFS
Azure Cosmos DB 透過任何與 GridFS 相容的 Mongo 驅動程式來支援 GridFS。
複寫
Azure Cosmos DB 支援最低層級的自動、原生複寫。 此邏輯也可延伸至達到低延遲且全域的複寫。 Azure Cosmos DB 不支援手動複寫命令。
可重試的寫入
可重試的寫入功能可讓 MongoDB 驅動程式自動重試特定寫入作業。 此功能會為特定作業產生更嚴格的需求,以符合 MongoDB 通訊協定需求。 啟用此功能後,分區化集合中的更新作業 (包括刪除) 需要將分區索引鍵納入查詢篩選或更新陳述式中。
例如,假設有一個分區化集合,依索引鍵 "country"
分區化:若要刪除欄位 "city" = "NYC"
的所有文件,則在已啟用「可重試寫入」時,應用程式必須針對所有分區索引鍵 ("country"
) 值執行作業。
- 「成功」
db.coll.deleteMany({"city": "NYC"})
- 失敗並出現錯誤 ShardKeyNotFound (61)
注意
可重試的寫入目前不支援大量未排序的寫入。 如果您想要執行已啟用可重試寫入的大量寫入,請執行大量排序寫入。
若要啟用此功能,請在資料庫帳戶中新增 EnableMongoRetryableWrites 功能。 此功能也可在 Azure 入口網站的功能索引標籤上啟用。
分區化
Azure Cosmos DB 支援自動與伺服器端的分區化。 它會自動管理分區的建立、放置和平衡。 Azure Cosmos DB 不支援手動將命令分區化,這表示您不需要叫用命令如 addShard
、balancerStart
和 moveChunk
。 您只需要在建立容器或查詢資料時指定分區索引鍵。
工作階段
Azure Cosmos DB 尚不支援伺服器端的工作階段命令。
存留時間
Azure Cosmos DB 支援以文件時間戳記為基礎的存留時間 (TTL)。 您可以在 Azure 入口網站中為集合啟用 TTL。
自訂 TTL
此功能提供在集合中任一欄位內設定自訂 TTL 的功能。
在欄位已啟用 TTL 的集合上:
可接受的類型是 BSON 資料類型和數值類型 (整數、長數或雙精度浮點數),其會解譯為 Unix 毫秒時間戳記,以判斷到期時間。
如果 TTL 欄位是陣列,則會將可接受的陣列最小元素視為文件到期時間。
如果文件中遺漏 TTL 欄位,則文件不會過期。
如果 TTL 欄位不是可接受的類型,則文件不會過期。
自訂 TTL 的限制
集合中只有一個欄位可以設定 TTL。
設定自訂 TTL 欄位後,
\_ts
欄位就無法用於文件過期。此外,您無法使用
\_ts
欄位。
組態
您可以藉由更新帳戶的 EnableTtlOnCustomPath
功能來啟用自訂 TTL。 了解如何設定功能。
設定 TTL
若要設定 TTL,請執行此命令:db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
交易
不分區集合支援多文件交易。 跨集合或分區集合不支援多文件交易。 交易逾時固定為 5 秒。
管理使用者和角色
Azure Cosmos DB 尚不支援使用者和角色。 不過,Azure Cosmos DB 支援可透過 Azure 入口網站 (連接字串頁面) 取得的 Azure 角色型存取控制 (Azure RBAC) 及讀寫和唯讀密碼/金鑰。
寫入考量
有些應用程式依賴寫入考量,其會指定寫入作業期間所需的回應數目。 由於 Azure Cosmos DB 在背景中處理複寫的方式,所有的寫入依預設都會自動仲裁。 用戶端程式碼所指定的任何寫入考量都會受到忽略。 了解如何使用一致性層級將可用性和效能最大化。
下一步
- 了解如何使用 Studio 3T 搭配 Azure Cosmos DB for MongoDB。
- 了解如何使用 Robo 3T 搭配 Azure Cosmos DB for MongoDB。
- 使用 Azure Cosmos DB for MongoDB 探索 MongoDB 範例。
- 正在嘗試為遷移至 Azure Cosmos DB 進行容量規劃嗎? 您可以使用現有資料庫叢集的相關資訊進行容量規劃。
- 如果您知道現有資料庫叢集中的虛擬核心和伺服器數目,請參閱使用虛擬核心或 vCPU 來估計要求單位。
- 如果您知道目前資料庫工作負載的一般要求率,則請參閱使用 Azure Cosmos DB 容量規劃工具來估計要求單位。