当前位置: 首页 > 知识库问答 >
问题:

通过代码在Cosmos DB中启用Mongo DB聚合管道

堵恺
2023-03-14

Azure Cosmos DB现在也支持聚合管道,这真的很好,这使它成为我们使用的一个可行替代品,而不是运行我们自己的Mongo DB容器,但我没有找到通过代码启用这些功能的方法(如何在门户中进行描述: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命令行工具,但我找不到正确的设置来传递。

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

共有2个答案

司马英才
2023-03-14

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

我的一位同事找到了以下解决此问题的临时解决方案,使用了可能未记录的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

我也许不建议将其用于生产目的,但据我们所见,它实际上是有效的。

艾敏学
2023-03-14

您可以使用以下拉请求来跟踪更改:https://github . com/Azure/Azure-CLI/pull/5451 # pullrequestreview-94854631

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

az cosmosdb update -n {acc} -g {rg} --capabilities EnableAggregationPipeline
 类似资料:
  • 我正在遵循这个关于通过java API创建YarnApp的示例。 https://github.com/hortonworks/simple-yarn-app 工作正常,但日志只存在于执行中,之后日志就消失了。 我怎么能通过代码捕捉到这个?或者启用一个选项?

  • 我需要汇总以下记录中的所有标记: https://gist.github.com/sbassi/5642925 (这个片段中有2个样本记录)并按大小对它们进行排序(首先是出现频率更高的标记)。但是我不想考虑具有特定“user_id”的数据(比方说,2,3,6和12)。 以下是我的尝试(只是聚合,没有过滤和排序): db。用户库。聚合({$unwind:“$annotations.data.tags

  • 我在尝试使用MongooseJs在Mongodb中按嵌套数组排序时遇到了一个小问题。 a)一个产品包含任务,每个任务都有子任务。 b)任务有顺序 这是一个示例产品文档: 结果: } 我正在使用MongoDB聚合管道来订购任务 结果: } 预期结果: 我真的很接近了,所有的排序似乎都在工作。我只需要一些帮助来将子任务放回父母体内。非常感谢任何帮助。 谢谢

  • 我试图使用MongoDb列出展开嵌套数组。 一个产品包含任务,每个任务可以有零个、一个或多个子任务。 以下是产品文档示例: 结果: 聚合管道在对任务进行排序方面起到了很大的作用 有时任务没有子任务,例如: 当他们没有孩子的时候,还有什么可以帮助他们完成任务吗? 当前聚合: 期望的结果:

  • 我的模式实现受到了mongo官方网站上这篇教程的影响 这基本上是为时间序列数据设计的模式,我将每个设备每小时的数据存储在单个文档中的数组中。我创建字段组合发送数据和时间的设备id。例如,如果id为的设备在发送数据,则我的 字段将变为