我可以从Azure DocumentDB查询单个文档,如下所示:
var response = await client.ReadDocumentAsync( documentUri );
Run Code Online (Sandbox Code Playgroud)
如果文档不存在,则会抛出DocumentClientException.在我的程序中,我遇到的情况是文档可能存在,也可能不存在.是否有任何方法可以在不使用try-catch的情况下查询文档,而无需两次往返服务器,首先查询文档,然后检查文档是否存在?
我有Node.js服务,其中我使用mongo-API与Document/Cosmos DB进行通信.我的服务运行正常,并执行所有的crud操作,但1分钟后,一些mongo错误从服务中抛出.
/document-db-service/node_modules/mongodb/lib/utils.js:123
process.nextTick(function() { throw err; });
^
MongoError: pool destroyed
at Pool.write (/document-db-service/node_modules/mongodb-core/lib/connection/pool.js:922:12)
at Cursor._find (/document-db-service/node_modules/mongodb-core/lib/cursor.js:286:22)
at nextFunction (/document-db-service/node_modules/mongodb-core/lib/cursor.js:584:10)
at Cursor.next [as _next] (/document-db-service/node_modules/mongodb-core/lib/cursor.js:692:3)
at fetchDocs (/document-db-service/node_modules/mongodb/lib/cursor.js:856:10)
at toArray (/document-db-service/node_modules/mongodb/lib/cursor.js:883:3)
at Cursor.toArray (/document-db-service/node_modules/mongodb/lib/cursor.js:836:44)
at exports.getDocsOfCollections (/document-db-service/services/collections.js:273:10)
at Layer.handle [as handle_request] (/document-db-service/node_modules/express/lib/router/layer.js:95:5)
at next (/document-db-service/node_modules/express/lib/router/route.js:137:13)
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么会出现此错误.请建议需要进行的更改以解决此错误.
我正在尝试将NoSql数据存储集成到诸如Cosmos DB之类的Identity Server 4中.我想知道是否有人做过类似的事情和/或是否有可能.
我正在使用带有Mongo适配器的Cosmos DB,通过Ruby mongo驱动程序访问.目前db中有大约2.5M的记录.
查询记录总量时,没有任何问题:
2.2.5 :011 > mongo_collection.count
D, [2017-11-24T11:52:39.796716 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | admin.count | STARTED | {"count"=>"xp_events", "query"=>{}}
D, [2017-11-24T11:52:39.954645 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | admin.count | SUCCEEDED | 0.15778699999999998s
=> 2565825
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试根据简单的位置计算找到的记录数量时,我遇到了Request rate is large错误:
2.2.5 :014 > mongo_collection.find(some_field: 'some_value').count
D, [2017-11-24T11:56:11.926812 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | admin.count | STARTED | {"count"=>"some_table", "query"=>{"some_field"=>"some_value"}}
D, [2017-11-24T11:56:24.629659 #9792] DEBUG -- : MONGODB | XXX.documents.azure.com:10255 | …Run Code Online (Sandbox Code Playgroud) 我一直在关注这里的官方文档: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 一起使用的正确方法,以及如何使其异步?
我在使用 Microsoft.Azure.Cosmos 3.2.0 版时遇到了一些问题,
跑步时
await this.Container.CreateItemAsync<LogEntity>(logEntity, new PartitionKey("anythingIPutHere"));
Run Code Online (Sandbox Code Playgroud)
它抛出
Microsoft.Azure.Cosmos.CosmosException HResult=0x80131500
消息=响应状态代码不表示成功:400 子状态:1001 原因:(消息:{“错误”:[“从文档中提取的分区密钥与标题中指定的不匹配"]}
但如果我把
await this.Container.CreateItemAsync<LogEntity>(logEntity, new PartitionKey(logEntity.Id));
Run Code Online (Sandbox Code Playgroud)
它有效,并且是唯一有效的情况。
我也试过
partitionKeyJSON 属性名称但没有成功;我查看了 Microsoft 站点上的一些指南,似乎您可以将分区键指定为某个字符串,而不必是 id 或使用对象上的属性名称指定;那么为什么会这样呢?
我正在创建一个基于 Cosmos DB 和 ASP.NET Core 3.0 的 API。使用 Cosmos DB 4.0 预览版 1 .NET Core SDK。我使用 OFFSET 和 LIMIT 子句实现了分页。我发现 RU 费用随着页数的增加而显着增加。页面大小为 100 项的示例:
Page 1: 9.78 RU
Page 10: 37.28 RU
Page 100: 312.22 RU
Page 500: 358.68 RU
Run Code Online (Sandbox Code Playgroud)
查询很简单:
SELECT * from c OFFSET [页*尺寸] LIMIT [尺寸]
我做错了什么,还是这是预期的?OFFSET是否需要扫描整个逻辑分区?我正在查询分区中包含大约 10000 个项目的单个分区键。看起来分区中的项目越多,性能就越差。(另请参阅“Russ”在用户声音中对此功能的评论)。
有没有更好的方法来实现整个分区的高效分页?
编辑 1:另外,我注意到在具有 10,000 个项目的分区中执行 OFFSET/LIMIT 时,在 Cosmos 模拟器中执行查询也会减慢 waaayyy 的速度。
编辑2:这是我的查询存储库代码。本质上,它包装了 Container.GetItemQueryStreamIterator() 方法并在处理 IAsyncEnumerable 时拉出 RU。查询本身就是上面的 SQL 字符串,没有 LINQ 或其他神秘的东西。
public async Task<RepositoryPageResult<T>> GetPageAsync(int? …Run Code Online (Sandbox Code Playgroud) 我使用 Cosmos Db,需要按COUNT的结果对结果进行排序。
我更喜欢直接在 Cosmosdb 查询的输出中对结果进行排序,而不是每次自己对结果进行排序(或为其创建服务)。
在 Azure 的文档资源管理器中,我对 AggregateEvent 集合执行以下请求:
SELECT * FROM (
SELECT COUNT(1) AS AlarmCount, a.AlarmType FROM AggregatedEvent a
WHERE a.AlarmType != null and a.Prom > 0
GROUP BY a.AlarmType ) AS g
ORDER BY g.AlarmCount
Run Code Online (Sandbox Code Playgroud)
结果出现以下错误消息:
无法解析标识符“AlarmCount”。
如果我使用另一个属性来排序 g.AlarmType(文档中存在的属性),则执行排序。
仅当您有办法使用 CosmosDb 归档订单时,请添加答案。
对于 SQL 数据库,我可以在 Azure 门户的“概述”边栏选项卡中轻松查看数据库的大小。或者我可以查询例如EXEC sp_spaceused以找出答案。
Cosmos DB 有这样的东西吗?
azure-cosmosdb ×10
azure ×4
mongodb ×2
.net ×1
asp.net-core ×1
c# ×1
node.js ×1
npm ×1
sql ×1
sql-order-by ×1