当我在 Cosmos DB 3.6 中运行以下命令时,
db.collectionName.ensureIndex({"Contract.ContractNumber":1, "PBPNumber":1})
Contract.ContractNumber
是子文档路径。
我得到了他的错误
{
"ok" : 0,
"errmsg" : "Compound index does not currently support nested documents or arrays.",
"code" : 115,
"codeName" : "CommandNotSupported"
}
相同的命令在开箱即用的 Mongo 中成功。
有办法吗?
谢谢
根据
CommandNotSupported
错误消息,当前不完全支持该功能。
据我所知,CosmosDB 仅支持 MongoDB API 的一个子集。 CosmosDB 有一些不同的行为和结果。但 CosmosDB 有责任改进对 MongoDB 的模拟。
当然,您可以在此处添加 feedback 来提交您的需求。或者,如果您想要完整的 MongoDB 功能支持,您可以考虑在 Azure 上使用 MongoDB Atlas。
关于@leopold.talirz 的回答:
看来这个功能其实是可以自己开启的。请参阅此文档以获取整体参考,然后有指向另一个文档的链接,其中逐步解释了如何操作。
编辑:最新消息似乎在这里:
https://github.com/MicrosoftDocs/azure-docs/issues/101394#issuecomment-1318041341
https://github.com/hashicorp/terraform-provider-azurerm/issues/19192#issuecomment-1341332461
看起来它将“很快”对用户可用,但到目前为止,它仅适用于 MSFT,并且文档更新得太快了。
多么混乱
自 2022 年 5 月起,只要点表示法路径(不包括最后一个元素)中的任何属性都不是数组,索引就可用于嵌套复合索引。
但是,正如此处所解释的。
由于很难确保集合中的所有数据都不能包含正在设置的属性上的数组,因此我们只能通过支持票启用此功能
附注我们发现 Azure 支持能够在整个 CosmosDB 实例上启用该功能,而不仅仅是在单个集合上。