Azure Cosmos DB for MongoDB 4.0 服务器版本中支持的功能和语法

使用 Azure Cosmos DB for MongoDB 4.0,可以将熟悉的 MongoDB 功能与企业级功能(例如多区域分发、自动分片和高可用性)配合使用。 本文介绍使用 Azure Cosmos DB for MongoDB 4.0 时支持的功能、语法和优势。

协议支持

此处列出了受支持的运算符以及任何限制或异常。 任何理解这些协议的客户端驱动程序应该都能够连接到 Azure Cosmos DB for MongoDB。 创建 Azure Cosmos DB for MongoDB 帐户时,3.6 版及更高版本的帐户采用 *.mongo.cosmos.azure.cn 格式的终结点,而 3.2 版的帐户采用 *.documents.azure.cn 格式的终结点。

注意

本文仅列出受支持的服务器命令,并排除客户端包装器函数。 客户端包装器函数(如 deleteMany()updateMany())在内部利用 delete()update() 服务器命令。 利用受支持的服务器命令的函数与 Azure Cosmos DB for MongoDB 兼容。

查询语言支持

Azure Cosmos DB for MongoDB 全面支持 MongoDB 查询语言构造。 可在此处找到当前支持的操作、运算符、阶段、命令和选项的详细列表。

数据库命令

Azure Cosmos DB for MongoDB 支持以下数据库命令:

查询和写入操作命令

支持
change streams
delete
eval ✖️ 不
find
findAndModify
getLastError
getMore
getPrevError ✖️ 不
insert
parallelCollectionScan ✖️ 不
resetError ✖️ 不
update

事务命令

支持
abortTransaction
commitTransaction

身份验证命令

支持
authenticate
getnonce
logout

管理命令

支持
cloneCollectionAsCapped ✖️ 不
collMod ✖️ 不
connectionStatus ✖️ 不
convertToCapped ✖️ 不
copydb ✖️ 不
create
createIndexes
currentOp
drop
dropDatabase
dropIndexes
filemd5
killCursors
killOp ✖️ 不
listCollections
listDatabases
listIndexes
reIndex
renameCollection ✖️ 不

诊断命令

支持
buildInfo
collStats
connPoolStats ✖️ 不
connectionStatus ✖️ 不
dataSize ✖️ 不
dbHash ✖️ 不
dbStats
explain
features ✖️ 不
hello
hostInfo
listDatabases
listCommands ✖️ 不
profiler ✖️ 不
serverStatus ✖️ 不
top ✖️ 不
whatsmyuri

聚合管道

聚合命令

支持
aggregate
count
distinct
mapReduce ✖️ 不

聚合阶段

支持
addFields
bucket ✖️ 不
bucketAuto ✖️ 不
changeStream
collStats ✖️ 不
count
currentOp ✖️ 不
facet
geoNear
graphLookup
group
indexStats ✖️ 不
limit
listLocalSessions ✖️ 不
listSessions ✖️ 不
lookup ❓部分
match
out
project
redact
replaceRoot
replaceWith ✖️ 不
sample
skip
sort
sortByCount
unwind

注意

$lookup 尚不支持服务器版本 3.6 中引入 的不相关的子查询 功能。 您尝试使用let is not supported运算符与$lookuplet字段时,会收到一条包含pipeline的错误消息。

布尔表达式

支持
and
not
or

转换表达式

支持
convert
toBool
toDate
toDecimal
toDouble
toInt
toLong
toObjectId
toString

集表达式

支持
setEquals
setIntersection
setUnion
setDifference
setIsSubset
anyElementTrue
allElementsTrue

比较表达式

注意

API for MongoDB 不支持在查询中使用数组文本的比较表达式。

支持
cmp
eq
gt
gte
lt
lte
ne
in
nin

算术表达式

支持
abs
add
ceil
divide
exp
floor
ln
log
log10
mod
multiply
pow
sqrt
subtract
trunc

字符串表达式

支持
concat
indexOfBytes
indexOfCP
ltrim
rtrim
trim
split
strLenBytes
strLenCP
strcasecmp
substr
substrBytes
substrCP
toLower
toUpper

文本搜索运算符

支持
meta ✖️ 不

数组表达式

支持
arrayElemAt
arrayToObject
concatArrays
filter
indexOfArray
isArray
objectToArray
range
reverseArray
reduce
size
slice
zip
in

变量运算符

支持
map
let

系统变量

支持
$$CURRENT
$$DESCEND
$$KEEP
$$PRUNE
$$REMOVE
$$ROOT

文本运算符

支持
literal

日期表达式

支持
dayOfYear
dayOfMonth
dayOfWeek
year
month
week
hour
minute
second
millisecond
dateToString
isoDayOfWeek
isoWeek
dateFromParts
dateToParts
dateFromString
isoWeekYear

条件表达式

支持
cond
ifNull
switch

数据类型运算符

支持
type

累加器表达式

支持
sum
avg
first
last
max
min
push
addToSet
stdDevPop
stdDevSamp

合并运算符

支持
mergeObjects

数据类型

Azure Cosmos DB for MongoDB 支持采用 MongoDB 二进制 JSON (BSON) 格式编码的文档。 4\.0 版的 API 扩大了此格式的内部使用来优化性能和降低成本。 这有利于通过运行 4.0 版本的终结点编写或更新的文档。

升级到版本 4.0 或更高版本的升级方案中,在升级之前创建的文档不会立即受益于增强的性能。 如需利用这些改进,请通过 4.0 终结点进行写操作来更新这些文档。

16 MB 的文档支持将文档的大小限制从 2 MB 提高到 16 MB。 此限制仅适用于启用该功能后创建的集合。 为数据库帐户启用此功能后,无法禁用此功能。

可以在 Azure 门户的功能选项卡中或通过 添加 EnableMongo16MBDocumentSupport 功能以编程方式启用 16 MB。

建议启用服务器端重试并避免通配符索引,以确保对较大文档的请求成功。 如有必要,提高数据库或集合请求单位也可能有助于性能。

支持
Double
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

索引和索引属性

索引

支持
Single Field Index
Compound Index
Multikey Index
Text Index ✖️ 不
2dsphere
2d Index ✖️ 不
Hashed Index ✖️ 不

索引属性

支持
TTL
Unique
Partial ✖️ 不
Case Insensitive ✖️ 不
Sparse ✖️ 不
Background

运算符

逻辑运算符

支持
or
and
not
nor

元素运算符

支持
exists
type

评估查询运算符

支持
expr
jsonSchema ✖️ 不
mod
regex
text ✖️ 不
where ✖️ 不

在 $regex 查询中,左定位表达式允许索引搜索。 但是,使用修饰符 i(不区分大小写)和修饰符 m(多行)会导致所有表达式中的集合被扫描。

如果需要包含 $|,最好创建两个(或更多)正则表达式查询。 例如,给定以下原始查询:find({x:{$regex: /^abc$/}),必须按如下所示进行修改:

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

第一部分使用索引将搜索限制为从开头 ^abc 的文档,第二部分与确切条目匹配。 条形运算符 | 充当“或”函数 - 查询 find({x:{$regex: /^abc |^def/}) 与字段 x 具有以 "abc" 或开头 "def"的值的文档匹配。 若要利用索引,将查询分解为由 $or 运算符联接的两个不同的查询: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })

小窍门

不支持该 text 命令。 请改用 $regex

数组运算符

支持
all
elemMatch
size

注释运算符

支持
comment

投影运算符

支持
elemMatch
meta ✖️ 不
slice

更新运算符

字段更新运算符

支持
inc
mul
rename
setOnInsert
set
unset
min
max
currentDate

数组更新运算符

支持
$
$[]
$[\<identifier\>]
addToSet
pop
pullAll
pull
push
pushAll

更新修饰符

支持
each
slice
sort
position

位更新运算符

支持
bit
bitsAllSet ✖️ 不
bitsAnySet ✖️ 不
bitsAllClear ✖️ 不
bitsAnyClear ✖️ 不

地理空间运算符

支持
$geoWithin
$geoIntersects
$near
$nearSphere
$geometry
$minDistance
$maxDistance
$center ✖️ 不
$centerSphere ✖️ 不
$box ✖️ 不
$polygon ✖️ 不

排序运算符

在将 findOneAndUpdate 操作与 API for MongoDB 4.0 版配合使用时,支持对一个和多个字段执行排序操作。 针对多个字段的排序操作是以前线路协议的限制。

索引

API for MongoDB 支持各种索引,以便对多个字段进行排序、提高查询性能并强制实施唯一性。

GridFS

Azure Cosmos DB 通过任何与 GridFS 兼容的 Mongo 驱动程序支持 GridFS。

复制

Azure Cosmos DB 支持在最低层进行自动本机复制。 此逻辑还可以扩展,实现低延迟的多区域复制。 Azure Cosmos DB 不支持手动复制命令。

可重试写入

可重试写入使 MongoDB 驱动程序可以在失败的情况下自动重试某些写入操作,但会导致对某些操作的要求更严格,这符合 MongoDB 协议要求。 启用此功能后,分片集合中的更新作(包括删除)需要将分片键包含在查询筛选器或 update 语句中。

例如,使用分片集合,对键 region 进行分片:若要删除具有字段 city = "NYC" 的所有文档,如果启用了可重试写入,应用程序需要对所有区域分片键(region)的值执行操作。

  • db.coll.deleteMany({"region": "USA", "city": "NYC"}) - 消息成功 Success
  • db.coll.deleteMany({"city": "NYC"}) - 失败并出现错误 ShardKeyNotFound(61)

注意

可重试操作目前不支持批量无序写入。 如果要在启用了可重试写入的情况下执行批量写入,请执行批量有序写入。

若要启用该功能,请向数据库帐户添加 EnableMongoRetryableWrites 功能。 也可通过 Azure 门户中的“功能”选项卡启用此功能。

分片

Azure Cosmos DB 支持服务器端自动分片。 它自动管理分片的创建、放置和均衡。 Azure Cosmos DB 不支持手动分片命令,这意味着你不必调用命令,例如 addShardbalancerStartmoveChunk。 只需在创建容器或查询数据时指定分片键。

会话

Azure Cosmos DB 尚不支持服务器端会话命令。

生存时间 (TTL)

Azure Cosmos DB 支持基于文档时间戳的生存时间 (TTL)。 可在 Azure 门户中为集合启用 TTL。

事务

未分片集合支持多文档事务。 不支持跨集合或分片集合的多文档事务。 事务超时固定为 5 秒。

用户和角色管理

Azure Cosmos DB 尚不支持用户和角色。 但是,Azure Cosmos DB 支持通过 Azure 门户(连接字符串页)获取的 Azure 基于角色的访问控制,以及读写和只读的密码/密钥。

写关注

某些应用程序依赖写关注,后者指定写入操作期间需要的响应数。 考虑到 Azure Cosmos DB 在后台处理复制的方式,所有写入在默认情况下都自动成为仲裁。 由客户端代码指定的任何写关注都会被系统忽略。 有关详细信息,请参阅使用一致性级别最大化可用性和性能