我最近意识到DocumentDB通过ReplaceDocumentAsync支持独立的更新操作.
我用Replace操作替换了下面的Upsert操作.
var result = _client
.UpsertDocumentAsync(_collectionUri, docObject)
.Result;
Run Code Online (Sandbox Code Playgroud)
所以这是现在:
var result = _client
.ReplaceDocumentAsnyc(_collectionUri, docObject)
.Result;
Run Code Online (Sandbox Code Playgroud)
但是,现在我得到了例外:
Microsoft.Azure.Documents.BadRequestException:ResourceType Document是意外的.ActivityId:b1b2fd71-3029-4d0d-bd5d-87d8d0a2fc95
不知道为什么,upsert和replace具有相同的静脉,而且对象与upsert相同,所以我希望它可以毫无问题地工作.
所有帮助赞赏.
谢谢
更新:尝试使用SelfLink方法实现此功能,并且适用于替换,但自身链接不适用于Upsert.这种行为令人困惑.我不喜欢我必须使用字符串连接在代码中构建自我链接.
这是DocumentDB上的一个新问题.我们希望将DocumentDB用于我们的应用程序.我们有多个用户更改存储在DocumentDB中的数据.我们怎样才能确保一个用户不会覆盖另一个用户的更改?
我有2个Azure Cosmos DB,它运行在MongoDb中.第一个是由其他人创建的,第二个是由我创建的.
如果我查询我的数据库,我的结构与$ t和$ v属性变得非常奇怪.
我的结构:
我的后端与两者都能正常工作,但我想添加Azure搜索,我不能用我的结构来做这件事.为什么会发生这种情况,我该如何解决?
TL; DR:此示例不适用于VS2017。
我有一个蓝色的宇宙DB,想什么时候添加或更新有火一些逻辑。为此,CosmosDBTrigger应该很棒。
教程演示了如何在Azure Portal中创建触发器,它对我有用。然而,(现在15.5.4,最新的)做在Visual Studio一样的东西不。
我用的是默认的 Azure的功能模板,预定义的宇宙DB触发和近默认代码:
[FunctionName("TestTrigger")]
public static void Run(
[CosmosDBTrigger("Database", "Collection", ConnectionStringSetting = "myCosmosDB")]
IReadOnlyList<Document> input,
TraceWriter log)
{
log.Info("Documents modified " + input.Count);
log.Info("First document Id " + input[0].Id);
}
Run Code Online (Sandbox Code Playgroud)
应用程序运行没有错误,但是当我实际在数据库中进行操作时,什么也没有发生。因此,我无法调试事物并实际上实现一些必需的逻辑。
连接字符串在指定 local.settings.json和被认为是。如果我故意犯规,则触发运行时错误。
看起来连接字符串似乎连接到错误的数据库。但是,正是一个,copypasted,字符串我在通过Azure的门户网站所做的扳机。
我该怎么办?我还能检查什么?
我正在编写单元测试DocumentDBRepository但是我得到了一个空引用异常.我使用Moq框架和XUnit.
这是我DocumentDBRepository课堂上的方法.
public class DocumentDBRepository<T> : IRepository<T> where T: class
{
private static string DatabaseId;
private static string CollectionId;
private static IDocumentClient client;
public DocumentDBRepository(IDocumentClient documentClient, string databaseId, string collectionId)
{
DatabaseId = databaseId;
CollectionId = collectionId;
client = documentClient;
CreateDatabaseIfNotExistsAsync().Wait();
CreateCollectionIfNotExistsAsync().Wait();
}
public async Task<IDocumentQuery<T>> GetQuery(Expression<Func<T, bool>> predicate)
{
try
{
IDocumentQuery<T> query = client.CreateDocumentQuery<T>(
UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),
new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true })
.Where(predicate)
.AsDocumentQuery();
return query;
}
catch (Exception e) …Run Code Online (Sandbox Code Playgroud) 我有存储过程,该过程仅基于Etag更新文档。
我已经获取了3种文档,更新了所有3种文档的某些属性。我正在尝试更新存储过程中的所有3个文档。但是在存储过程更新第3个文档之前,另一个用户更新了第3个文档。所以在这种情况下,我确实会出现并发错误。我可以在存储过程中获取文档,但是我不确定必须更新哪个属性,因为我不知道该属性是由我还是由存储过程中的其他用户修改的,因为它只是替换了文档。与文档需要更新的所有地方所使用的存储过程相同,因此我无法对其进行硬编码。
我该如何处理?
在实体框架代码优先方法中,我们确实为SQL 提供了DbUpdateConcurrencyException类,从中我们可以看到哪个属性被修改并采取相应的Action。Cosmos DB中是否提供类似于DbUpdateConcurrencyException的异常类?
我确实读过DocumentDB的第3部分– DocumentDB中的并发和DocumentDB –存储过程中的乐观并发,这两篇文章都告诉我们如何使用Etag处理乐观并发。
我正在将一个非常简单的mongo数据库(夫妇100个条目)迁移到Azure Cosmos DB。我的应用程序基于node-js,所以我使用猫鼬作为映射器。在非常简单之前,先定义架构,查询集合并完成。
现在,当在cosmos db中设置集合时,有人问我分区键和分片键的问题。我可以忽略的第一个,但最后一个是必需的。快速阅读有关该主题的内容并了解它是一种分区(再次,我不需要也不想),我只是选择_id作为分片键。
当然有些东西行不通。
虽然查找查询工作正常。更新或插入记录失败,以下是错误:
MongoError:命令中的查询必须针对单个分片键
Cosmos db(使用mongo API)被广告宣传为我的替代产品。显然不是这种情况,因为我从来不需要担心mongo中的这类事情,尤其是对于这么小的app / db。
因此,我可以以某种方式禁用分片吗?另外,我如何定义分片键,而不用担心它呢?
干杯
我试图查询一个文档很少的集合。有些集合具有“异常”属性,而有些则没有。
我的最终查询看起来像:
Records that do not contain Exception:
**select COUNT(1) from doc c WHERE NOT IS_DEFINED(c.Exception)**
Records that contain Exception:
**select COUNT(1) from doc c WHERE IS_DEFINED(c.Exception)**
Run Code Online (Sandbox Code Playgroud)
但这似乎行不通。当 NOT IS_DEFINED 返回一些计数时,IS_DEFINED 返回 0 条记录,其中实际上有数据。
我的数据看起来像(某些文档可以包含 Exception 属性而其他文档则不包含):
[{
'Name': 'Sagar',
'Age': 26,
'Exception: 'Object reference not set to an instance of the object', ...
},
{
'Name': 'Sagar',
'Age': 26, ...
}]
Run Code Online (Sandbox Code Playgroud) 我使用 Azure Cosmos DB 按以下格式存储数据。
{
"id": "id",
"name": "Name",
"items": [
{
"id": "id",
"name": "name"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Azure Functions 和 JavaScript 添加到此文档数据库中,并且按预期工作。
现在我想在数组中添加一个新产品products。在不重新创建整个文档的情况下,这甚至可能吗?
我真的很想发送两个这样的输入。
输入 1
{
"id": "A",
"name": "Name A",
"items": [
{
"id": "01",
"name": "Item A"
}
]
}
Run Code Online (Sandbox Code Playgroud)
输入 2
{
"id": "A",
"name": "Name A",
"items": [
{
"id": "02",
"name": "Item B"
}
]
}
Run Code Online (Sandbox Code Playgroud)
结果
{
"id": "A",
"name": "Name A",
"items": [
{
"id": "01", …Run Code Online (Sandbox Code Playgroud) 当从公司网络外部的代码进行连接时,Cosmos DB 连接工作得很好。但从公司网络来看,它会抛出一个503 ServiceUnavailable状态代码。可能出现哪些问题?
azure-cosmosdb ×10
azure ×8
asp.net-core ×1
c# ×1
mongodb ×1
moq ×1
sharding ×1
unit-testing ×1