我正在寻找 MySQL now() 的等效项。任何格式都可以。
我正在 .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")].
预先感谢大家的帮助。
有谁知道如何在名称中带有连字符的 CosmosDB 集合上使用 SQL 查询?例如
SELECT * FROM product-group where product-group.id = "3829503"
Run Code Online (Sandbox Code Playgroud)
我发现可以使用 [""] 语法访问属性,但还没有看到实际集合名称的任何解决方案。
有没有人比较过 Azure SQL 成本与 DocumentDB/CosmosDB 成本?我不清楚 Azure CosmosDB 成本中显示的 RU。例如,1 TB db 中的 1 个请求不能等于 1 GB db 中的 1 个请求。
如果我没有分区键值,如何删除文档?
我有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) 围绕 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,有没有办法将“计数”查询作为文档查询处理?
我尝试使用 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) 我正在使用 .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-容器
如何启用跨分区查询?
我正在尝试使用 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
我正在开发一个IDocumentClient用于对 CosmosDB 执行查询的应用程序。我GenericRepository通过查询支持Id和Predicate。
将数据库从 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) azure-cosmosdb ×10
c# ×3
.net-core ×2
linq ×2
asp.net-core ×1
azure ×1
javascript ×1
json ×1
json.net ×1
repository ×1