通过代码在 Cosmos DB 中启用 Mongo 数据库聚合管道
Enabling Mongo DB Aggregation Pipelines in Cosmos DB via Code
Azure Cosmos DB 现在还支持聚合管道,这真是太棒了,这使我们可以使用它来替代 运行 我们自己的 Mongo 数据库容器,但我失败了找到一种通过代码启用功能的方法(此处描述了如何在门户中执行此操作: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
命令行工具,但我找不到正确的设置来传入。
这还没有浮出水面,还是我遗漏了什么?
不要这样做 - 查看已接受的答案。
我的一位同事针对此问题找到了以下临时解决方案,使用的可能是未记录的 API Azure(这是一个 bash
脚本)。传入 LOCATION
、RESOURCE_GROUP
和 BM_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
我可能不建议将其用于生产目的,但据我们所知,它确实有效。
您可以通过以下拉取请求跟踪更改:https://github.com/Azure/azure-cli/pull/5451#pullrequestreview-94854631
以下命令将允许您启用聚合管道。
az cosmosdb update -n {acc} -g {rg} --capabilities EnableAggregationPipeline
Azure Cosmos DB 现在还支持聚合管道,这真是太棒了,这使我们可以使用它来替代 运行 我们自己的 Mongo 数据库容器,但我失败了找到一种通过代码启用功能的方法(此处描述了如何在门户中执行此操作: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
命令行工具,但我找不到正确的设置来传入。
这还没有浮出水面,还是我遗漏了什么?
不要这样做 - 查看已接受的答案。
我的一位同事针对此问题找到了以下临时解决方案,使用的可能是未记录的 API Azure(这是一个 bash
脚本)。传入 LOCATION
、RESOURCE_GROUP
和 BM_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
我可能不建议将其用于生产目的,但据我们所知,它确实有效。
您可以通过以下拉取请求跟踪更改:https://github.com/Azure/azure-cli/pull/5451#pullrequestreview-94854631
以下命令将允许您启用聚合管道。
az cosmosdb update -n {acc} -g {rg} --capabilities EnableAggregationPipeline