我的容器上有以下分区 ID:/vesselId
我正在尝试添加该对象的集合:
public class CoachVessel
{
[JsonProperty("id")]
public string vesselId { get; set; }
[JsonProperty("imo")]
public long Imo { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我批量插入文档的代码:
CosmosClientOptions options = new CosmosClientOptions() { AllowBulkExecution = true };
CosmosClient cosmosclient = new CosmosClient(connStr, options);
Container container = cosmosclient.GetContainer("CoachAPI", "Vessels");
List<Task> concurrentTasks = new List<Task>();
foreach (var vessel in vessels.Take(1))
{
concurrentTasks.Add(container.CreateItemAsync(vessel, new PartitionKey(vessel.vesselId)));
}
await Task.WhenAll(concurrentTasks);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误,该错误未提供太多信息?
Microsoft.Azure.Cosmos.CosmosException: '响应状态代码不表示成功: BadRequest (400); 子状态:1001;活动 ID: ; 原因: …
order_id = 9234029m考虑到 CosmosDB 中的此文档,如何检索匹配的对象:
{
"order": {
"order_id": "9234029m",
"order_name": "name",
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在 CosmosDB 数据资源管理器中查询,但不可能order_id像这样简单地查询嵌套对象:
{
"order": {
"order_id": "9234029m",
"order_name": "name",
}
}
Run Code Online (Sandbox Code Playgroud)
(错误:“语法错误,‘订单’附近的语法不正确”)
这看起来应该是这么简单,但事实并非如此!(在 CosmosDB 数据资源管理器中,所有查询都需要以 开头SELECT * FROM c,但 REST SQL 也是一种替代方案。)
我有一个带有 mongo API 的 cosmosDB,但是此 API 不支持许多功能,所以我想切换到 SQL API?
azure-cosmosdb azure-cosmosdb-mongoapi azure-cosmosdb-sqlapi
我正在开发一个新项目,有人建议我看看 Cosmos DB 以用于我的数据存储,因为它将成为一个全球 SaaS 应用程序,为潜在的数十万用户提供服务。
由于这是我第一次涉足 NoSQL 数据库,我不可避免地遇到了很多需要学习的东西,但我觉得我已经慢慢掌握了它,并且实际上对此感到非常兴奋。
现在问题来了:我有一个相对简单的数据结构,我似乎无法理解如何实现,而且我几乎已经接受了这样一个事实:它可能只是一个工作负载,而不是“在非关系数据库中确实工作得很好。但正如我所说,我完全是绿色的,所以我来这里是为了进行健全性检查,以防我遗漏了一些明显的东西
我有一个由“用户”对象和“帖子”对象组成的数据结构,我需要根据无界标签数组将它们关联起来,以基本上创建自定义的提要,它们看起来像这样
用户:
{
id: 1,
name: "username",
interests: [
"fishing",
"photography",
"stargazing",
]
}
Run Code Online (Sandbox Code Playgroud)
邮政:
{
id: 1,
title: "My post title",
body: "My post content",
tags: [
"tennis",
"sport",
"photography",
]
}
Run Code Online (Sandbox Code Playgroud)
我想返回所有帖子的列表,这些帖子的标签中有一个或多个给定用户的兴趣,所以基本上是这样的查询:
SELECT DISTINCT VALUE Posts FROM Posts
JOIN tag IN Posts.Tags
WHERE tag IN <<user.interests>>
Run Code Online (Sandbox Code Playgroud)
在 SQL 中,我创建一个用户表和一个帖子表,并根据共享标签/兴趣将它们连接起来,但我一生都无法弄清楚如何对其进行非规范化(如果可能的话)。在我第一次尝试仅使用 2 个对象时,我是否真的遇到了 NoSQL 不可能的流程之一?或者我只是个菜鸟?
database azure data-structures azure-cosmosdb azure-cosmosdb-sqlapi
实体框架有一些关于嵌入实体的很好的文档,但我不知道如何嵌入一个简单的字符串数组IEnumerable<string>。
样板课
public class Post {
public string Id {get;set;}
public string Content {get;set;}
public IEnumerable<string> Tags {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
这应该在 cosmos 中保存为:
{
"id": "xxx",
"content": "long content here",
"tags": ["tag1", "tag2"],
...
}
Run Code Online (Sandbox Code Playgroud)
我知道我必须在OnModelCreating(ModelBuilder modelBuilder)上下文中配置一些东西。但我无法正确设置它。
我尝试过以下选项(以及其他几种ToJsonProperty方法):
modelBuilder.Entity<Post>().OwnsMany(p => p.Tags);modelBuilder.Entity<Post>().OwnsMany<string>(p => p.Tags);最终我希望能够根据这些标签进行查询,非常感谢任何帮助或正确方向的指示!
我也找到了这个答案,但是将数组转换为逗号分隔的字符串会达不到目的(因为这不允许我们查询这些帖子)。
其他人在 Microsoft 论坛上问了大致相同的问题,其中一位 Microsoft 员工表示,在纯 CosmosDB 中,可以在 cosmos 中嵌入字符串数组。
c# entity-framework-core azure-cosmosdb azure-cosmosdb-sqlapi
我正在寻找 MySQL now() 的等效项。任何格式都可以。
我在 Visual Studio 中有一个 docker-compose 项目,它启动 3 个服务。其中之一使用 cosmosdb。
我已按照https://hub.docker.com/r/microsoft/azure-cosmosdb-emulator/上的说明在docker 容器中启动模拟器并且它工作正常。
但现在我想通过 docker-compose 文件启动并运行它。以下是我目前的配置。
version: '3.4'
services:
gateway:
environment:
- ASPNETCORE_ENVIRONMENT=Development
image: ${DOCKER_REGISTRY-}gateway
ports:
- "7000:80"
depends_on:
- servicea
- serviceb
build:
context: .\ApiGateways\IAGTO.Fenix.ApiGateway
dockerfile: Dockerfile
servicea:
environment:
- ASPNETCORE_ENVIRONMENT=Development
image: ${DOCKER_REGISTRY-}servicea
depends_on:
- email.db
build:
context: .\Services\ServiceA
dockerfile: Dockerfile
serviceb:
environment:
- ASPNETCORE_ENVIRONMENT=Development
image: ${DOCKER_REGISTRY-}serviceb
build:
context: .\Services\ServiceB
dockerfile: Dockerfile
email.db:
image: microsoft/azure-cosmosdb-emulator
container_name: cosmosdb-emulator
ports:
- "8081:8081"
Run Code Online (Sandbox Code Playgroud)
我运行时可以看到容器正在运行 docker container list

但是对https://localhost:8081/_explorer/index.html 的请求失败了。
对此非常感谢的任何帮助
visual-studio docker .net-core docker-compose azure-cosmosdb-sqlapi
我是 Cosmos DB 新手。我正在使用 SQL API 检索记录。现在我想在 ARRAY_CONTAINS 中添加“Not In”。我为此做了很多研发,但无法找到任何解决方案。
目标:
返回 Cosmos 集合分区内特定文档字段的不同值的计数。
脚步:
如果我在 Azure Cosmos 数据库上运行以下查询,
SELECT DISTINCT c.field
FROM c
WHERE c.field = 'abc' AND c.partitionKeyField = '123'
Run Code Online (Sandbox Code Playgroud)
我按预期得到一行,例如以下响应
[
{
"field": "abc"
}
]
Run Code Online (Sandbox Code Playgroud)
但是,如果我随后运行以下查询以尝试通过以下查询计算响应中不同文档的数量
[
{
"field": "abc"
}
]
Run Code Online (Sandbox Code Playgroud)
它返回
[
6
]
Run Code Online (Sandbox Code Playgroud)
c.field这是设置为 的文档总数,"abc"而不是 的不同值的数量c.field。
问题:
请您帮助我理解为什么查询返回 的文档数量而不是不同值的数量c.field,以及是否有一个查询将返回 的不同值的数量c.field,即 1?
编辑-PS。我知道这是一个人为的示例,因为根据定义,唯一值的数量c.field始终为 1 - 我故意从实际情况简化了这一点。
我想在单个 Cosmos DB 容器中存储几种不同的对象类型,因为它们都按逻辑分组,并且可以按时间戳一起读取,以避免额外的 HTTP 调用。
但是,Cosmos DB 客户端 API 似乎没有提供一种简单的方法来执行多种类型的读取。到目前为止,我找到的最好的解决方案是编写自己的 CosmosSerializer 和 JsonConverter,但这感觉很笨拙:https ://thomaslevesque.com/2019/10/15/handling-type-hierarchies-in-cosmos-db-part -2/
是否有一种更优雅的方法来将不同类型的项目读取到共享基类,以便我可以稍后转换它们,或者我是否必须接受打击?
谢谢!