标签: azure-cosmosdb-sqlapi

Cosmos DB 补丁子对象

我正在尝试使用新的部分文档更新功能来修补 Cosmos Db 文档的子对象。但是,我找不到办法做到这一点。

如果文档如下所示,如何使用新的 Patch 方法将 ID 为 2 ProductCode 属性的子项(在 Items 数组中)更新为“A-111”?


{
    "id": "SalesOrder2",
    "ponumber": "PO15428132599",
    "OrderDate": "2005-07-01T00:00:00",
    "DueDate": "2005-07-13T00:00:00",
    "ShippedDate": "2005-07-08T00:00:00",
    "AccountNumber": "Account2",
    "SubTotal": 6107.082,
    "TaxAmt": 586.1203,
    "Freight": 183.1626,
    "TotalDue": 4893.3929,
    "DiscountAmt": 1982.872,
    "Items": [
        {
            "Id": 1,
            "OrderQty": 3,
            "ProductCode": "A-123",
            "ProductName": "Product 1",
            "CurrencySymbol": "$",
            "CurrencyCode": "USD",
            "UnitPrice": 17.1,
            "LineTotal": 5.7
        },
        {
            "Id": 2,
            "OrderQty": 2,
            "ProductCode": "A-456",
            "ProductName": "Product 2",
            "CurrencySymbol": "$",
            "CurrencyCode": "USD",
            "UnitPrice": 10,
            "LineTotal": 20
        }
    ],
    "_rid": "BsMkAMc43s4CAAAAAAAAAA==", …
Run Code Online (Sandbox Code Playgroud)

azure-cosmosdb azure-cosmosdb-sqlapi

13
推荐指数
1
解决办法
4687
查看次数

与Azure CosmosDB中的查询一样

我想通过以下查询从Cosmos DB中检索数据:

pi

(这是一个sql查询,我可以在mysql中使用)

这是pi一个字符串值.这可以是09001001或09025001.

那么有没有办法在Cosmos DB中使用like命令.我知道cosmos DB使用CONTAINS,但是当类似的通配符不在字符串的开头或结尾时,不能使用它.

azure azure-cosmosdb azure-cosmosdb-sqlapi

12
推荐指数
2
解决办法
4869
查看次数

如何在 CosmosDB SDK v3.0 异步查询中使用 LINQ?

我一直在关注这里的官方文档:https : //docs.microsoft.com/en-us/azure/cosmos-db/sql-api-get-started#Query

但是我不知道如何在 SQL 字符串上正确使用 LINQ 表达式。我尝试了 GetItemLinqQueryable,但我不知道使用它是否正确。也不是异步的。

var db = Client.GetDatabase(databaseId);
var container = db.GetContainer(containerId);

var q = container.GetItemLinqQueryable<Person>();
var result = q.Where(p => p.Name == "Name").ToList();
Run Code Online (Sandbox Code Playgroud)

这是将 LINQ 与 Cosmos v3 一起使用的正确方法,以及如何使其异步?

azure-cosmosdb azure-cosmosdb-sqlapi

11
推荐指数
2
解决办法
8060
查看次数

azure cosmos db在内存db中的兼容性是什么

我将 Spring Boot 应用程序与 azure CosmosDB-SQL API 集成在一起,对于集成测试用例,我想在内存数据库中使用,但尝试在内存中使用 H2 它不起作用

azure-cosmosdb-sqlapi

10
推荐指数
1
解决办法
1062
查看次数

Azure Cosmos DB SQL API UPDATE 语句 - 不要替换整个文档

我可以UPDATE为 Azure Cosmos DB编写语句吗?SQL API 支持查询,但更新呢?

特别是,我希望更新文档而不必检索整个文档。我有文档的 ID,我知道我想在文档中更新的确切路径。例如,假设我的文档是

{
  "id": "9e576f8b-146f-4e7f-a68f-14ef816e0e50",
  "name": "Fido",
  "weight": 35,
  "breed": "pomeranian",
  "diet": {
    "scoops": 3,
    "timesPerDay": 2
  }
}
Run Code Online (Sandbox Code Playgroud)

我想更新diet.timesPerDay到 ID 所在的 1 "9e576f8b-146f-4e7f-a68f-14ef816e0e50"。我可以在不完全替换文档的情况下使用 Azure SQL API 做到这一点吗?

azure azure-cosmosdb azure-cosmosdb-sqlapi

10
推荐指数
3
解决办法
2万
查看次数

对 Azure Cosmos DB 中的分区键建立索引

假设我的容器中有以下数据:

{
    "id": "1DBF704E-1623-4844-DC86-EFA729A5C048",
    "firstName": "Wylie",
    "lastName": "Ramsey",
    "country": "AZ",
    "city": "Tucson"
}
Run Code Online (Sandbox Code Playgroud)

当我查询特定分区键时,我使用字段“id”作为项目 id,使用字段“country”作为分区键:

SELECT * FROM c WHERE c.country = "AZ"
Run Code Online (Sandbox Code Playgroud)

(获取“AZ”中的所有人员)

我应该添加“国家/地区”作为索引,还是默认获得它,因为我将“国家/地区”作为分区键?使用 SDK 时是否有区别(即:添加选项new PartitionKey("AZ"),然后发送如上所述的查询)?

database-partitioning azure-cosmosdb azure-cosmosdb-sqlapi

10
推荐指数
2
解决办法
3227
查看次数

如何使用 Azure 门户清除 Cosmos DB 数据库或删除所有项目

如果转到https://portal.azure.com,打开我们的 Azure Cosmos DB 帐户 (1) --> 数据资源管理器 (2) --> 单击用户 (3) --> 单击新建 SQL 查询:

天蓝色截图 1

Azure 将打开一个文本框以输入查询:

天蓝色截图 2

我发现 Cosmos DB 不允许使用 DELETE 代替 SELECT: /sf/answers/3383744171/,所以我应该这样做:

SELECT * FROM c DELETE c
SELECT * FROM c DELETE *
Run Code Online (Sandbox Code Playgroud)

但是我的任何尝试都奏效了。

azure azureportal azure-cosmosdb azure-cosmosdb-sqlapi

9
推荐指数
2
解决办法
3万
查看次数

使用 SDK v3 来自 Cosmos DB 的 408 状态代码

我有一个 API (.NET Core 2.2),它使用 SDK v3.5.0 从 Cosmos DB 检索文档。目前,由于对 Cosmos DB 的请求超时,一些请求会引发异常 - 响应是408 状态代码。值得一提的是,90% 的请求都被成功处理。

使用遥测记录 API 的活动,我注意到在依赖项表(记录对 Cosmos DB 的每个请求)中,持续时间超过 60 秒的请求是由名为“创建/查询文档”的命令发起的。这些是属于超时的请求。

另一方面,所有其他请求都使用“查询文档”命令,该命令在 < 5 秒内响应并且请求成功完成。为了分享更多上下文,我在下面详细说明了错误堆栈跟踪、一般规范以及我如何查询文档。

堆栈跟踪

    Microsoft.Azure.Cosmos.CosmosException : Response status code does not indicate success: 408 Substatus: 0 Reason: (Microsoft.Azure.Cosmos.CosmosException : Response status code does not indicate success: 408 Substatus: 0 Reason: (Microsoft.Azure.Documents.RequestTimeoutException: GatewayStoreClient Request Timeout. Start Time:1/30/2020 4:18:00 AM; Total Duration:00:01:05.0332130; Http Client Timeout:00:01:05; Activity id: 7498789a-8e09-4c3e-96a6-31c32e4dc2d7; Inner Message: The …
Run Code Online (Sandbox Code Playgroud)

c# .net-core azure-cosmosdb azure-cosmosdb-sqlapi

9
推荐指数
0
解决办法
2244
查看次数

Cosmos SDK3 Container 可以单例吗?

我想减少 Azure Cosmos DB SQL-API 的负载,该 API 通过依赖项注入从 .NET Core Web API 调用。

在 App Insights 中,我注意到每次调用 Web API 都会导致对 Cosmos 的 GetDatabase 和 GetCollection 调用,当 Cosmos 负载较重时,这可能需要 5 秒才能运行。

我做了CosmosClient一个单例(例如这里的建议 - https://learn.microsoft.com/en-us/azure/cosmos-db/performance-tips-dotnet-sdk-v3-sql

然而,我找不到任何关于DatabaseContainer对象是否也可以是单例的建议,因此它们是为每个对 Web API 的请求创建的。

我检查数据库和集合是否存在(例如,遵循此处的建议 - https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.cosmosclient.getdatabase?view=azure-dotnet#备注https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.cosmosclient.getcontainer?view=azure-dotnet#remarks

这意味着对于 Web API 的每个请求,都会运行以下代码

var databaseResponse = await this.cosmosClient.CreateDatabaseIfNotExistsAsync(
    this.databaseConfiguration.DatabaseName,
    throughput: this.databaseConfiguration.DatabaseLevelThroughput);
var database = databaseResponse.Database;
var containerResponse = await database.CreateContainerIfNotExistsAsync(containerId, partitionKey);
var container = containerResponse.Container;
Run Code Online (Sandbox Code Playgroud)

我可以创建单例Database并将Container …

c# azure-cosmosdb azure-cosmosdb-sqlapi

9
推荐指数
1
解决办法
6049
查看次数

参数化 Where IN 子句不适用于 CosmosClient QueryDefinition 对象

我正在尝试编写一个包含 IN 子句的参数化查询。

对于前:

工作代码

输入字符串:“'guid1','guid2','guid3'”

public List<Employee> GetEmployeeIds(string ids){
QueryDefinition query =new QueryDefinition(@"Select * from Employee where Employee.Id in ("+ ids+")");
var result = GetDetails(query,cosmosClient);
return result;
}
Run Code Online (Sandbox Code Playgroud)

结果:返回预期结果

非工作代码

输入字符串:“'guid1','guid2','guid3'”

public List<Employee> GetEmployeeIds(string ids){
QueryDefinition query =new QueryDefinition(@"Select * from Employee where Employee.Id in ( @ids )")
                  .WithParameter("@ids", ids);
var result = GetDetails(query,cosmosClient);
return result;
}
Run Code Online (Sandbox Code Playgroud)

结果:返回0

上述代码使用的NuGet包: Microsoft.Azure.Cosmos 3.8.0

注意:我已尝试此链接中提到的所有选项,但它不适用于 CosmosClient QueryDefinition 对象 WHERE IN 与 Azure DocumentDB (CosmosDB) .Net SDK

对此的任何帮助都将受到高度赞赏。

提前致谢。!!

.net c# azure-cosmosdb azure-cosmosdb-sqlapi asp.net-core-3.1

9
推荐指数
2
解决办法
3527
查看次数