标签: azure-cosmosdb

如何从 CosmosDB Gremlin API DB 下载所有数据?

我在Azure 门户数据资源管理器中没有看到任何菜单项来将所有节点和边缘从CosmosDB Gremlin数据库备份到JSON 或 CSV。我尝试运行查询gV()来生成所有节点的所有json ,但json选项卡未列出所有节点。

是否有工具以及如何使用该工具下载所有节点和边的说明?

azure-cosmosdb azure-cosmosdb-gremlinapi

5
推荐指数
1
解决办法
1531
查看次数

查询 azure CosmosDb 中的嵌套 JSON 属性

我在制作 cosmosDB 中的嵌套数据查询时遇到一些困难。

假设我有数据存储在这个结构中:

{
   id:"1234",
   data:{
       people:{
           "a826bbc5-add9-42d8-ba52-f5de52973556":{
               first_name: "Kyle"
           },
           "efb119d-9f12-4d11-a7e1-38e4719a699c":{
               first_name: "Bob"
           },
           "b402faac-d1ba-4317-9ba6-673c76a8fc37":{
               first_name: "Jane"
           }
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想编写一个查询,该查询将返回所有名字为“Bob”的人

我需要类似的东西:

Select * from c where c.data.people[*].first_name = "Bob";
Run Code Online (Sandbox Code Playgroud)

请注意,“people”对象是一个实际的 JSON 对象,而不是 JSON 数组,因此没有 array_contains,我基本上需要等效的 JSON obj。

我环顾四周,似乎找不到适合这个常见用例的查询。

有人知道我如何完成这个查询吗?

json azure azure-cosmosdb

5
推荐指数
1
解决办法
7565
查看次数

我可以从 Azure Cosmos DB 读取/加载文档并同时获取其写入锁定吗?

基本上我想知道只有一方会更改该文档。我想避免这样的情况:一个辅助角色或不同辅助角色的 2 个不同实例将读取文档的相同状态,然后每个实例将编写自己的修改(可能不同)。顺序写入可能很容易一个接一个地顺利进行,但这不是我想要的。

如果由于某种原因未发生写入,则此写入锁应在一段时间后自动过期。

我听到一些传言说这是可能的,但我在文档中找不到这一点。

azure azure-cosmosdb

5
推荐指数
1
解决办法
4271
查看次数

获取通过 LINQ 生成的 Cosmos DB 查询的底层 SQL

我正在使用 Linq 创建对 cosmos 的查询

这将被转换为 SQL,然后运行该 SQL 来进行搜索

var modelName = "Mondeo";
var baseQuery = client.CreateDocumentQuery<Car>(StaticSettings.ProjectionsCollectionUri,
  new FeedOptions { MaxItemCount = maxItemCount, PartitionKey = new PartitionKey(partitionKey) })
                .Where(order => car.ModelName == modelName);
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码并在此语句后放置一个断点,我可以看到生成的原始 SQL 查询

这显示在检查器的第一行

{{"query":"SQL HERE"}}
Run Code Online (Sandbox Code Playgroud)

我怎样才能通过代码达到这个目的?

我希望得到这个 SQL 以确保它是我想要的并且我可以在我的测试中使用它

保罗

linq iqueryable azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
1
解决办法
1491
查看次数

LinkedAuthorizationFailed 在 PowerShell 中意味着什么?

我正在尝试使用 PowerShell 在 cosmos db 中添加虚拟网络规则。VNETS 存在于不同的租户中。我对存储帐户做了同样的事情,效果很好。我收到以下错误。有人可以给我一些关于我哪里出错的指示吗?是否可以在 Cosmos 数据库中执行此操作?

Set-AzureRmResource : LinkedAuthorizationFailed: 客户端有权在范围 '/subscriptions/Cosmos DB/resourceGroups/nbspreprd3/providers/Microsoft.DocumentDb/databaseAccounts/nbspreprd3 的订阅 ID 上执行操作 'Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action' -config-document-db',但是当前租户''无权访问链接订阅''。在行:8个字符:5 + Set-AzureRmResource -ResourceType $ResourceType -ResourceGroupNam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzureRmResource], ErrorResponseMessageException + FullQualifiedErrorId:LinkedAuthorizationFailed、Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

这是 PowerShell 脚本

$ResourceGroupName = "*******"
$accountname = "*******" 
$ResourceType = "Microsoft.DocumentDb/databaseAccounts" 
$cosmosAccount = Get-AzureRMResource -ResourceType $ResourceType -ResourceGroupName $resourceGroupName -Name $accountName
$VnrID1 = "/subscriptions/*******/resourceGroups/build-agents/providers/Microsoft.Network/virtualNetworks/build-agents-vnet/subnets/build-2-subnet"
$VnrID2 = "/subscriptions/*******/resourceGroups/build-agents/providers/Microsoft.Network/virtualNetworks/build-agents-vnet/subnets/build-3-subnet"
$VnrID3 = "/subscriptions/*******/resourceGroups/build-agents/providers/Microsoft.Network/virtualNetworks/build-agents-vnet/subnets/=build1-subnet"


function setCosmosRule {

    Param($ResourceGroupName, $accountname, $ResourceType, $cosmosAccount, $VnrID1)

    $vnetrules = $cosmosAccount.Properties.virtualNetworkRules …
Run Code Online (Sandbox Code Playgroud)

powershell firewall rules azure azure-cosmosdb

5
推荐指数
1
解决办法
7027
查看次数

为什么设置 CosmosDB ThroughputSettings 会导致“系统中不存在具有指定 id 的实体”?

在尝试部署具有 2 个集合(“MyCollection1”、“MyCollection2”)的 CosmosDB 实例时,我不断收到错误:

NotFound:系统中不存在指定id的实体

因此,我继续在自定义 ARM 模板中搜索“resourceId”(请参见下文),但找不到错误原因。

我不明白,为什么管道至少不为我打印行号?

管道截图

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "accountName": {
            "defaultValue": "my-cosmosdb",
            "type": "String"
        }
    },
    "variables": {
        "resourceName": "[concat(resourceGroup().name, '-', parameters('accountName'))]",
        "resourceId": "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]",
        "apiVersion": "[providers('Microsoft.DocumentDB', 'databaseAccounts').apiVersions[0]]"
    },
    "outputs": {
        "CosmosDbConnectionString": {
            "type": "string",
            "value": "[concat('AccountEndpoint=https://', variables('resourceName'), '.documents.azure.com:443/;AccountKey=', listKeys(variables('resourceId'), variables('apiVersion')).primaryMasterKey, ';')]"
        },
        "DatabaseName": {
            "type": "string",
            "value": "MyDB"
        },
        "CollectionName1": {
            "type": "string",
            "value": "MyCollection1"
        },
        "CollectionName2": {
            "type": "string",
            "value": "MyCollection2"
        }
    },
    "resources": [
        {
            "type": "Microsoft.DocumentDB/databaseAccounts",
            "apiVersion": …
Run Code Online (Sandbox Code Playgroud)

azure azure-resource-manager azure-rm-template azure-cosmosdb

5
推荐指数
2
解决办法
1798
查看次数

从 Docker 容器连接到 CosmosDB

我正在尝试学习 Docker,并慢慢地构建一个解决方案。我创建了一个 Azure Function App,它公开了一个 Http 端点。我创建了 Docker 文件来在 Linux 容器中构建和运行解决方案(图像:mcr.microsoft.com/azure-functions/dotnet:3.0Debian 图像)。我在 Windows 机器上。

我在 Windows 计算机上安装了 Azure CosmosDB 模拟器,并希望从 Linux 容器中运行的函数应用连接到它。

我将 Cosmos 的连接字符串作为环境变量传递。

ARG COSMOS_CONNECTION_STRING="AccountEndpoint=https://host.docker.internal:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下代码连接到模拟器:

ARG COSMOS_CONNECTION_STRING="AccountEndpoint=https://host.docker.internal:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到以下错误(我假设前几行是最相关的,但我将其余行包括在内,以防我错了):

---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
 ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
   at System.Net.Security.SslStream.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo exception)
   at System.Net.Security.SslStream.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslStream.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslStream.ProcessReceivedBlob(Byte[] buffer, Int32 …
Run Code Online (Sandbox Code Playgroud)

docker azure-cosmosdb

5
推荐指数
2
解决办法
6002
查看次数

Azure 函数异常 - 将日志写入表存储时出错:Microsoft.Azure.Cosmos.Table.StorageException

我有一个 azure 函数,它与 blob 存储通信以读取上次同步日期时间,然后基于此从 Cosmos 数据库中读取数据。

很少有交互可以正常工作,并且在某些情况下会随机抛出以下异常

“将日志写入表存储时出错:Microsoft.Azure.Cosmos.Table.StorageException:无法执行套接字上的操作,因为系统缺乏足够的缓冲区空间或队列已满。 ---> System.Net.Http .HttpRequestException: 无法执行套接字上的操作,因为系统缺乏足够的缓冲区空间或队列已满。 ---> System.Net.Sockets.SocketException (10055): 无法执行套接字上的操作因为系统缺乏足够的缓冲区空间或因为队列已满。在 System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken CancellationToken) --- 内部异常堆栈跟踪结束 --- 在 System.Net .Http.ConnectHelper.ConnectAsync(字符串主机,Int32端口,CancellationTokencancellationToken)在System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage请求,布尔allowHttp2,CancellationTokencancellationToken)在System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage请求, CancellationToken CancellationToken) 在 System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken CancellationToken) 在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken CancellationToken) 在 System.Net.Http.RedirectHandler.SendAsync (HttpRequestMessage 请求,CancellationToken CancellationToken)在 System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage 请求,CancellationToken CancellationToken)在 System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(任务1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at Microsoft.Azure.Cosmos.Table.RestExecutor.TableCommand.Executor.ExecuteAsync[T](RESTCommand1 cmd,IRetryPolicy 策略,OperationContext operationContext,CancellationToken 令牌)-- - 内部异常堆栈跟踪结束 ---1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token) at Microsoft.Azure.WebJobs.Logging.Utility.SafeExecuteAsync(CloudTable …

c# azure .net-core azure-blob-storage azure-cosmosdb

5
推荐指数
2
解决办法
3940
查看次数

如何从 Cosmos DB 中过滤的 FeedIterator 获取总计数

我有以下代码来过滤 Cosmos DB 中的一些数据:

Container container = await service.GetContainer(containerName, partitionKeyA);
using (FeedIterator<T> resultSet = container.GetItemQueryIterator<T>(
    queryDefinition: GetComplexSQLQueryDefinition(),
    paginationInfo.Token,
    requestOptions: new QueryRequestOptions()
    {
      PartitionKey = new PartitionKey(partitionKey),
      MaxItemCount = 10
    }
    ))
{ 
  FeedResponse<T> response = await resultSet.ReadNextAsync();
  //get total count
  int totalCount = -1;
}
Run Code Online (Sandbox Code Playgroud)

查询可以产生许多记录,因此我需要分页

不幸的是,我需要项目的总数- 它可能会根据过滤而变化。

根据这个答案,我只有两个选择:

  1. 我创建第二个 SQL 查询,它使用 SQL select 命令来计算记录数 - 然后再次查询数据库以选择实际记录:

    var query = new QueryDefinition("SELECT value count(1) FROM c WHERE c.tenantId = @type");
    query.WithParameter("@type", '5d484526d76e9653e6226aa2');
    var container …
    Run Code Online (Sandbox Code Playgroud)

c# azure-cosmosdb

5
推荐指数
1
解决办法
4728
查看次数

Getting "One of the specified inputs is invalid" in Azure CosmosDb PatchItemAsync

Below is the code that I have:

List<PatchOperation> patchOperations = new List<PatchOperation>();
            patchOperations.Add(PatchOperation.Replace("/endpointId", 100));
string id = "id1";
PartitionKey partitionKey = new PartitionKey("partitionkey1");

await _container.PatchItemAsync<Watermark>(id,
    partitionKey,
    patchOperations);
Run Code Online (Sandbox Code Playgroud)

I am expecting to get endpointId property to be replaced with 100.

但是,我面临着 Message: {"Errors":["One of the specified inputs is invalid"]}

我可以检查一下我缺少哪一部分吗?或者我是否必须等待为我的 Cosmos 数据库启用补丁私人预览功能?

azure-cosmosdb azure-cosmosdb-sqlapi

5
推荐指数
2
解决办法
7139
查看次数