在 Cosmos DB 中,我可以(感谢 SO 社区)插入这样的文档:
data = {'attribute1':1, 'attribute2': 2}
client.CreateDocument('dbs/databaseName/colls/collectionName/', data)
Run Code Online (Sandbox Code Playgroud)
如果我可以一次插入多个文档,那就太好了,就像在 SQL 中你可以这样做:
insert into table values (1, 2), (3,4), (5,6)
Run Code Online (Sandbox Code Playgroud)
我知道您可以使用存储过程进行批量上传,但是如果我基本上可以将一堆文档连接在一起,我认为这对我来说会更好(...或者至少让我现在学习如何编写存储产品) .
那么,当针对 CosmosDB 使用带有 C# 驱动程序的 MongoDB API 时,我们能否以某种方式RequestCharge从 CosmosDB 响应中获取每个查询?
我对使用Azure CosmosDB的图形功能很感兴趣。查看文档,我看到它将图形顶点和边作为 JSON 文档(具有商定的架构)进行处理,因此可以作为普通的旧 DocumentDB 访问它。
考虑到这一点,您在创建新实例(链接)时需要进行的API选择的含义是什么?
例如:
更新:我知道门户差异(如下所述Jesse Carter)。我感兴趣的是,在 SQL(Document DB) 与 Graph 之间进行选择的特定场景中,此开关是否会驱动其他任何内容
更新
CosmoDB 团队确认他们所说的存在问题,他们已经在着手修复。
此处评论部分的更多信息:https : //docs.microsoft.com/en-us/azure/cosmos-db/mongodb-introduction
原问题
我们正计划迁移到 CosmoDB,但我们发现 $sort 命令存在问题。在我们当前运行此查询的 MongoDB 服务器中:
db.getCollection('Product').find({
"ProductTypeId" : ObjectId("5913546b1ba88338e4347641"),
"SubtypeIngredients" : "5949852c1ba88344d0facbf5"
})
.skip(0).sort({ "IngredientRanks.2.Rank" : 1 }).limit(1)
Run Code Online (Sandbox Code Playgroud)
我们得到了一些结果,但是在 CosmoDB 中运行相同的查询时,我们没有得到任何结果。
如果我从查询中删除排序命令,我会从 CosmoDB 获得结果
集合中的数据在我们本地db和CosmoDB中是一样的。
任何帮助,将不胜感激。谢谢!
更新:
这是显示问题的实际查询的屏幕截图。
当从公司网络外部的代码进行连接时,Cosmos DB 连接工作得很好。但从公司网络来看,它会抛出一个503 ServiceUnavailable状态代码。可能出现哪些问题?
我有时会在 Application Insights 的 Failures => failed dependency 中看到此错误:

一直在搜索文档,但在任何地方都看不到提到这一点。此状态是否意味着操作已通过令牌取消,或者是否类似于以前的 400 错误的跨分区响应?(https://github.com/Azure/azure-cosmos-dotnet-v2/issues/606#issuecomment-427909582)
另外,此操作是否会重试,或者是否会因此丢失数据?
尝试将新项目添加到父对象的子集合中。例如,在下面的代码中,如何将一个新项目添加到 Items 集合中?
{
"id": "SalesOrder2",
"ponumber": "PO15428132599",
"OrderDate": "2005-07-01T00:00:00",
"AccountNumber": "Account2",
"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==",
"_self": "dbs/BsMkAA==/colls/BsMkAMc43s4=/docs/BsMkAMc43s4CAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-e136-0dbec04601d7\"",
"_attachments": "attachments/",
"_ts": 1637760030
}
Run Code Online (Sandbox Code Playgroud)
做这样的事情:
public async Task AddProduct(Item item)
{
var response = await CosmosDbContainer.PatchItemAsync<Product>(
id: "a1dc8286-bb5e-4ac0-beb4-f9f1dfc79711",
partitionKey:new PartitionKey("a1dc8286-bb5e-4ac0-beb4-f9f1dfc79711"), …Run Code Online (Sandbox Code Playgroud) 我们在 Docker 容器中使用 Cosmos DB 模拟器。容器与测试一起启动。有时在第一次测试期间,连接时会出现读取超时,测试会中止。在测试之前我们是否可以运行任何检查来验证 Cosmos DB 是否已完成初始化?例如通过查询特定的URL?
我在 Intel Mac 上,尝试运行 linux azure-cosmos-emulator 模拟器,但每次启动映像并尝试创建数据库时,它都会挂起并且从不创建数据库。容器日志中没有显示任何内容。我该如何解决这个问题或排除故障?
这是我的设置。我究竟做错了什么?
version: '2.4'
## to run:
## export EXTERNAL_IP=$(ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1)
## docker-compose up -d
services:
cosmosdb:
container_name: cosmosdb
hostname: cosmosdb
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
platform: linux
tty: true
restart: always
mem_limit: 3GB
ports:
- '8081:8081'
- '8900-8902'
- '10250-10256'
- '10350:10350'
environment:
AZURE_COSMOS_EMULATOR_PARTITION_COUNT: 10
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE: true
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE: ${EXTERNAL_IP}
volumes:
- vol_cosmos:/tmp/cosmos.data
volumes:
vol_cosmos:
Run Code Online (Sandbox Code Playgroud)
注1:该文件夹/tmp/cosmos.data是我的Mac上具有777权限的文件夹。当我启动容器时,我没有看到在此文件夹中创建任何文件。注意2:我还尝试将持久性设置为 false。仍然无法创建数据库。注3:我曾经有过这个工作,但我不知道我做了什么来破坏它。
这个问题最初是由ben-graffle在Github上提出的。
我在这里发帖是为了扩大这个问题的受众。
使用 cosmos C# SDK 以及 docker-compose 文件中的特定端口映射配置接收 408 超时
docker compose 可以工作
cosmos:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
container_name: cosmos
ports:
- 8081:8081
- 10251:10251
- 10252:10252
- 10253:10253
- 10254:10254
expose:
- "8081"
- "10251-10255"
environment:
- AZURE_COSMOS_EMULATOR_PARTITION_COUNT=6
- AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=false
- AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=${LOCALIPADDRESS}
Run Code Online (Sandbox Code Playgroud)
docker compose 不起作用
cosmos:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
container_name: cosmos
expose:
- "8081"
- "10251-10255"
ports:
- 8082:8081
- 10252:10251
- 10253:10252
- 10254:10253
- 10255:10254
environment:
- AZURE_COSMOS_EMULATOR_PARTITION_COUNT=6
- AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=false
- AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=${LOCALIPADDRESS}
Run Code Online (Sandbox Code Playgroud)
抛出异常的函数调用
var httpMessageHandler …Run Code Online (Sandbox Code Playgroud)