标签: azure-cosmosdb

如何获取 Cosmos DB 中的当前时间

我正在寻找 MySQL now() 的等效项。任何格式都可以。

azure-cosmosdb azure-cosmosdb-sqlapi

6
推荐指数
2
解决办法
4903
查看次数

Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy

我正在 .Net 中为 Cosmos DB 创建一个存储库,为了保持 DRY 并避免用 装饰每个类属性[JsonProperty(PropertyName = "thePropertyName")],我用 .Net 装饰了我的类 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]

CreateDocumentAsync(例如)使用属性的驼峰式大小写名称正确序列化 JSON 格式的 Cosmos DB 文档。到目前为止,一切都很好。

然而,我的问题是,当我通过 LINQ 查询 Cosmos DB 时,它生成的用于查询 COSMOS DB 的 SQL 不尊重[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]装饰类的属性,因此不会返回任何文档。这是因为 Cosmos DB 查询对于字段/属性名称区分大小写。例如,以下命令会产生不同的结果(请注意名称的大小写差异):

SELECT * FROM c WHERE c.name = "Health"
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM c WHERE c.Name = "Health" 
Run Code Online (Sandbox Code Playgroud)

我通过检查 生成的查询 SQL 确认了这一点CreateDocumentQuery,并寻找了可以允许我指示属性名称大小写的选项,但SqlQuerySpec没有成功。

所以,我的问题是:有谁知道如何在 Cosmos Db 中使用类定义的驼峰式大小写策略进行 LINQ 查询,而不必通过[JsonProperty(PropertyName = "thePropertyName")].

预先感谢大家的帮助。

c# linq json json.net azure-cosmosdb

6
推荐指数
1
解决办法
2217
查看次数

如何使用集合名称中带有连字符的 SQL 查询?

有谁知道如何在名称中带有连字符的 CosmosDB 集合上使用 SQL 查询?例如

SELECT * FROM product-group where product-group.id = "3829503"
Run Code Online (Sandbox Code Playgroud)

我发现可以使用 [""] 语法访问属性,但还没有看到实际集合名称的任何解决方案。

azure azure-cosmosdb

6
推荐指数
1
解决办法
1758
查看次数

Azure SQL 成本与 DocumentDB/CosmosDB 成本的比较

有没有人比较过 Azure SQL 成本与 DocumentDB/CosmosDB 成本?我不清楚 Azure CosmosDB 成本中显示的 RU。例如,1 TB db 中的 1 个请求不能等于 1 GB db 中的 1 个请求。

azure-sql-database azure-cosmosdb

6
推荐指数
1
解决办法
8615
查看次数

如何在不知道分区键值的情况下从 Cosmos DB 中删除对象?

如果我没有分区键值,如何删除文档?

我有id文档和分区键的属性名称(在我的例子中:)type

我试过:

var docLink = UriFactory.CreateDocumentUri(databaseName, collectionName, documentId);
var resp = client.DeleteDocumentAsync(docLink).Result;
Run Code Online (Sandbox Code Playgroud)

有错误: PartitionKey value must be supplied for this operation.

示例文档:

{
   "id": "AB12CD", 
   "type": "Company", 
   "Address": "123 Test Street"
}
Run Code Online (Sandbox Code Playgroud)

我试图获取特定文档 ID 的分区键值

使用 C# 代码...

我试图通过它读取文档id,然后提取该type值,但出现错误:InvalidOperationException: PartitionKey value must be supplied for this operation.使用以下代码。

var response = client.ReadDocumentAsync(UriFactory.CreateDocumentUri(databaseName, collectionName, id)).Result;
Run Code Online (Sandbox Code Playgroud)

我还尝试了跨分区查询:

FeedOptions queryOptions = new FeedOptions { MaxItemCount = 10 };
queryOptions.EnableCrossPartitionQuery = true;
var queryString …
Run Code Online (Sandbox Code Playgroud)

c# azure-cosmosdb

6
推荐指数
2
解决办法
5669
查看次数

将 LINQ“计数”查询作为 IDocumentQuery 处理

围绕 CosmosDB .NET SDK,我发现了一个有趣的问题。我想对以下查询使用 SDK LINQ 支持:

SELECT VALUE COUNT(1) FROM c WHERE <predicate>
Run Code Online (Sandbox Code Playgroud)

好吧,在编写 LINQ 查询之后,我立即意识到可能无法处理诸如文档查询之类的查询。但是,由于文档查询允许您捕获查询指标并在结果页面之间解除阻塞线程,因此我非常喜欢它。这是代码:

client.CreateDocumentQuery<TEntity>.Where(<predicate>).Count()
Run Code Online (Sandbox Code Playgroud)

即使我知道 Count() 的结果类型不是 IQueryable,有没有办法将“计数”查询作为文档查询处理?

linq azure-cosmosdb

6
推荐指数
1
解决办法
452
查看次数

存储过程天蓝色 Cosmos DB 返回空集合

我尝试使用 Azure 文档中的示例 sp 创建代码创建存储过程,但无法获取集合详细信息。它总是返回空值。

存储过程

// SAMPLE STORED PROCEDURE
function sample(prefix) {
    var collection = getContext().getCollection();
    console.log(JSON.stringify(collection));

    // Query documents and take 1st item.
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT * FROM root r',
    function (err, feed, options) {
        if (err) throw err;

        // Check the feed and if empty, set the body to 'no docs found', 
        // else take 1st element from feed
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else { …
Run Code Online (Sandbox Code Playgroud)

javascript stored-procedures azure-cosmosdb

6
推荐指数
1
解决办法
1148
查看次数

在 Microsoft.Azure.Cosmos.Client 上启用跨分区查询

我正在使用 .NET Core Cosmos DB Client NuGet 包 Microsoft.Azure.Cosmos v3.4.4

我需要跨分区查询,但我还没有找到如何做到这一点,如FeedOptions.EnableCrossPartitionQuery以下文章 https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-query-容器

如何启用跨分区查询?

asp.net-core azure-cosmosdb

6
推荐指数
1
解决办法
2638
查看次数

Entity Framework Core,无法在 PrimaryKey 上设置 HasName

我正在尝试使用 Entity Framework Core 访问 CosmosDB 集合。

我的数据库有各种数据,但主键是“id”我的模型有一个子集,但使用“Id”而不是“id”。

我已经检查过我能够读/写一个测试数据库,它包含一个“id”的副本作为“Id”。这不会导致任何问题。

据我所知,https: //docs.microsoft.com/en-us/ef/core/modeling/indexes 应该可以设置“HasName”属性。

[DataContract]
[Serializable]
public class TestModel
{
    [DataMember] 
    [JsonProperty("id")] 
    public string Id { get; set; }

    [DataMember] 
    public string Pid { get; set; }
}


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<TestModel>().ToContainer("TestModel");
    modelBuilder.Entity<TestModel>().HasPartitionKey(x => x.Pid);
    modelBuilder.Entity<TestModel>().HasNoDiscriminator();

    modelBuilder.Entity<TestModel>().HasKey(b => b.Id).HasName("id");
}
Run Code Online (Sandbox Code Playgroud)

使用这个,我仍然得到一个错误。

InvalidOperationException:无法跟踪类型为“TestModel”的实体,因为主键属性“Id”为空。

我也曾在反复试验中,尝试使用。- HasName + HasKey / HasIndex - HasColumnName + 属性

entity-framework entity-framework-core .net-core azure-cosmosdb

6
推荐指数
1
解决办法
393
查看次数

支持按分区键查询而无需更改接口的存储库

我正在开发一个IDocumentClient用于对 CosmosDB 执行查询的应用程序。我GenericRepository通过查询支持IdPredicate

将数据库从 SqlServer 更改为 CosmosDb 时,我遇到了麻烦,在 CosmosDb 中,我们有partition key. 而且我不知道如何通过partition key不更改接口partition key作为参数传递来实现支持查询的存储库。

public interface IRepository<T>
{
    //I can handle this one by adding value of partition key to id and split it by ":"
    Task<T> FindByIdAsync(string id);

    // I am stuck here!!!
    Task<T> FindByPredicateAsync(Expression<Func<T, bool>> predicate);
}
Run Code Online (Sandbox Code Playgroud)

我的实现

public class Repository<T> : IRepository<T>
{
    private readonly IDocumentClient _documentClient;

    private readonly string _databaseId;
    private readonly …
Run Code Online (Sandbox Code Playgroud)

c# repository data-partitioning .net-core azure-cosmosdb

6
推荐指数
1
解决办法
255
查看次数