共用方式為

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

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

重要

Azure Cosmos DB for MongoDB 版本 3.6 没有当前支持终止计划。 未来支持终止的最低通知是三年。

协议支持

默认情况下,对于新帐户,Azure Cosmos DB for MongoDB 与 MongoDB 服务器版本 3.6 兼容。 此处列出了受支持的运算符以及任何限制或异常。 任何理解这些协议的客户端驱动程序应该都能够连接到 Azure Cosmos DB for MongoDB。 创建 Azure Cosmos DB API for MongoDB 帐户时,3.6 版的帐户的终结点格式为 *.mongo.cosmos.azure.cn,而 3.2 版的帐户的终结点格式为 *.documents.azure.cn

查询语言支持

Azure Cosmos DB for MongoDB 全面支持 MongoDB 查询语言构造。 以下各节介绍 Azure Cosmos DB 当前支持的服务器操作、运算符、阶段、命令和选项的详细列表。

注意

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

数据库命令

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

查询和写入操作命令

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

身份验证命令

支持
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 ✅ 是

集表达式

支持
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 ✅ 是
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 ✅ 是

数据类型

支持
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 的文档,第二部分与确切条目匹配。 竖线运算符 | 充当“or”函数 - 查询 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 支持各种索引,以便对多个字段进行排序、提高查询性能并强制实施唯一性。

GridFS

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

复制

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

可重试写入

Azure Cosmos DB 尚不支持可重试写入。 客户端驱动程序必须在其连接字符串中添加 retryWrites=false

分片

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

会话

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

生存时间 (TTL)

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

用户和角色管理

Azure Cosmos DB 尚不支持用户和角色。 但是,它支持 Azure 基于角色的访问控制和读写和只读密码或密钥,这些密码或密钥可以通过 Azure 门户中的连接字符串窗格获取。

写关注

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