【问题标题】:Enabling Mongo DB Aggregation Pipelines in Cosmos DB via Code通过代码在 Cosmos DB 中启用 Mongo DB 聚合管道
【发布时间】:2017-12-20 10:01:26
【问题描述】:

Azure Cosmos DB 现在还支持聚合管道真是太好了,这使它成为我们使用它而不是运行我们自己的 Mongo DB 容器的可行替代品,但我未能找到通过代码启用这些功能的方法(如何在 Portal 中进行描述如下:https://azure.microsoft.com/en-gb/blog/azure-cosmosdb-extends-support-for-mongodb-aggregation-pipeline-unique-indexes-and-more/)。

我们每天都需要通过部署管道从头开始创建集成和测试环境,并且支持 Cosmos DB 实例必须支持聚合管道。

我已经检查了https://docs.microsoft.com/en-us/rest/api/documentdb/ 的 API 文档以及 az cosmosdb 命令行工具,但我找不到要传入的正确设置。

这只是还没有浮出水面,还是我错过了什么?

【问题讨论】:

  • 目前,此功能仅可通过 Azure 门户获得。即将添加对启用预览功能的 Azure CLI 支持。上线后,我将分享文档链接
  • @SiddheshVethe 好的,谢谢。这将是一件很棒的事情。
  • 有这方面的消息吗,@SiddheshVethe?不幸的是,这越来越烦人了。

标签: mongodb azure azure-cosmosdb azure-cli


【解决方案1】:

您可以通过以下拉取请求跟踪更改:https://github.com/Azure/azure-cli/pull/5451#pullrequestreview-94854631

以下命令将允许您启用聚合管道。

az cosmosdb update -n {acc} -g {rg} --capabilities EnableAggregationPipeline

【讨论】:

  • 运行此命令后,我遇到以下问题:参数'resource_group_name'必须符合以下模式:'^[-\\w\\._\(\)]+$'。回溯(最后一次调用):文件“/usr/local/Cellar/azure-cli/2.0.43/libexec/lib/python3.7/site-packages/knack/cli.py”,第 197 行,调用 cmd_result = self.invocation.execute(args) 文件“/usr/local/Cellar/azure-cli/2.0.43/libexec/lib/python3.7/site-packages/azure/cli/core/commands/__init__.py” ,第 369 行,在执行 Six.reraise(*sys.exc_info())....
  • 有没有办法通过 ARM 实现这一点?我尝试了 "capabilities": { "name": "EnableAggregationPipeline" } 但它什么也没做。
  • 您也可以通过 Azure 门户启用此功能。去Mongo Preview Features,就可以看到选项了。
【解决方案2】:

不要这样做 - 请参阅已接受的答案。

我的一位同事使用 Azure 的可能未记录的 API(这是一个 bash 脚本)找到了以下临时解决方案来解决此问题。传入LOCATIONRESOURCE_GROUPBM_ACCOUNT,此脚本将创建启用聚合管道的Mongo API Cosmos DB 帐户。​​

TOKEN=$(az account get-access-token | jq ".accessToken" | tr -d '"')

if [ -z "$LOCATION" ]; then
    export LOCATION="NorthEurope"
fi
echo "INFO [cosmos]: Using location: $LOCATION"
echo "INFO [cosmos]: Creating bookmarks DB"
BM_ACCOUNT="name-of-your-bookmark-db"
az cosmosdb create --resource-group $RESOURCE_GROUP \
    --name $BM_ACCOUNT \
    --kind MongoDB \
    --locations "$LOCATION=0"

curl -X PATCH \
     -H "Authorization: Bearer ${TOKEN}" \
     -H 'Content-Type: application/json' \
     --data '{"properties":{"capabilities":[{"name":"EnableAggregationPipeline","description":null}]}}' \
     "https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.DocumentDb/databaseAccounts/${BM_ACCOUNT}/?api-version=2015-04-08" 

WAIT_FOR=12
SUCCESS=0
while [ $WAIT_FOR -gt 0 ]; do
    sleep 10

    RESULT=$(curl -H "Authorization: Bearer ${TOKEN}" \
                  -H 'Content-Type: application/json' \
                  "https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.DocumentDb/databaseAccounts/${BM_ACCOUNT}/?api-version=2015-04-08" \
                  | jq ".properties.capabilities[].name" \
                  | tr -d '"')

    if [ "$RESULT" == "EnableAggregationPipeline" ]; then
        SUCCESS=1
        break;
    fi

    echo "INFO [cosmos]: Waiting another ${WAIT_FOR} tries for 'EnableAggregationPipeline' capability..."
    ((WAIT_FOR--))
done

if [ $SUCCESS -eq 0 ]; then
    echo "ERROR [cosmos]: Did not get required CosmosDB capability of 'EnableAggregationPipeline' in time for account ${BM_ACCOUNT} - giving up." >&2
    exit 1
fi

我可能不建议将其用于生产目的,但据我们所知,它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2019-06-05
    • 2022-12-02
    • 1970-01-01
    相关资源
    最近更新 更多