标签: azure-cosmosdb

DocumentDB替换不工作

我最近意识到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.这种行为令人困惑.我不喜欢我必须使用字符串连接在代码中构建自我链接.

azure azure-cosmosdb

6
推荐指数
1
解决办法
3238
查看次数

DocumentDB上的并发

这是DocumentDB上的一个新问题.我们希望将DocumentDB用于我们的应用程序.我们有多个用户更改存储在DocumentDB中的数据.我们怎样才能确保一个用户不会覆盖另一个用户的更改?

azure azure-cosmosdb

6
推荐指数
2
解决办法
2837
查看次数

Azure Cosmos DB Mongodb $ t和$ v

我有2个Azure Cosmos DB,它运行在MongoDb中.第一个是由其他人创建的,第二个是由我创建的.

如果我查询我的数据库,我的结构与$ t和$ v属性变得非常奇怪.

我的结构:

在此输入图像描述

其他DB的结构(应该是这样): 在此输入图像描述

我的后端与两者都能正常工作,但我想添加Azure搜索,我不能用我的结构来做这件事.为什么会发生这种情况,我该如何解决?

azure mongodb azure-cosmosdb

6
推荐指数
1
解决办法
1071
查看次数

Azure函数:CosmosDBTrigger在Visual Studio中未触发

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的门户网站所做的扳机。

我该怎么办?我还能检查什么?

c# azure visual-studio azure-functions azure-cosmosdb

6
推荐指数
1
解决办法
1197
查看次数

在使用Linq查询的单元测试中模拟IDocumentQuery

我正在编写单元测试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)

unit-testing moq azure asp.net-core azure-cosmosdb

6
推荐指数
1
解决办法
1168
查看次数

如何通过广义方式在Cosmos DB存储过程中处理乐观并发?

我有存储过程,该过程仅基于Etag更新文档。

我已经获取了3种文档,更新了所有3种文档的某些属性。我正在尝试更新存储过程中的所有3个文档。但是在存储过程更新第3个文档之前,另一个用户更新了第3个文档。所以在这种情况下,我确实会出现并发错误。我可以在存储过程中获取文档,但是我不确定必须更新哪个属性,因为我不知道该属性是由我还是由存储过程中的其他用户修改的,因为它只是替换了文档。与文档需要更新的所有地方所使用的存储过程相同,因此我无法对其进行硬编码。

我该如何处理?

在实体框架代码优先方法中,我们确实为SQL 提供了DbUpdateConcurrencyException类,从中我们可以看到哪个属性被修改并采取相应的Action。Cosmos DB中是否提供类似于DbUpdateConcurrencyException的异常类?

我确实读过DocumentDB的第3部分– DocumentDB中的并发DocumentDB –存储过程中的乐观并发,这两篇文章都告诉我们如何使用Etag处理乐观并发。

azure azure-cosmosdb

6
推荐指数
1
解决办法
353
查看次数

如何为Mongo API禁用Cosmos DB分片密钥

我正在将一个非常简单的mongo数据库(夫妇100个条目)迁移到Azure Cosmos DB。我的应用程序基于node-js,所以我使用猫鼬作为映射器。在非常简单之前,先定义架构,查询集合并完成。

现在,当在cosmos db中设置集合时,有人问我分区键和分片键的问题。我可以忽略的第一个,但最后一个是必需的。快速阅读有关该主题的内容并了解它是一种分区(再次,我不需要也不想),我只是选择_id作为分片键。

当然有些东西行不通。

虽然查找查询工作正常。更新或插入记录失败,以下是错误:

MongoError:命令中的查询必须针对单个分片键

Cosmos db(使用mongo API)被广告宣传为我的替代产品。显然不是这种情况,因为我从来不需要担心mongo中的这类事情,尤其是对于这么小的app / db。

因此,我可以以某种方式禁用分片吗?另外,我如何定义分片键,而不用担心它呢?

干杯

sharding azure-cosmosdb azure-cosmosdb-mongoapi

6
推荐指数
1
解决办法
1917
查看次数

Azure CosmosDB IS_DEFINED 与 NOT IS_DEFINED

我试图查询一个文档很少的集合。有些集合具有“异常”属性,而有些则没有。
我的最终查询看起来像:

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-cosmosdb

5
推荐指数
2
解决办法
6886
查看次数

将记录插入到 Azure Cosmos DB 中文档内的数组中

我使用 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)

azure azure-functions azure-cosmosdb

5
推荐指数
1
解决办法
1621
查看次数

Azure Cosmos DB:503 服务不可用

当从公司网络外部的代码进行连接时,Cosmos DB 连接工作得很好。但从公司网络来看,它会抛出一个503 ServiceUnavailable状态代码。可能出现哪些问题?

azure azure-cosmosdb

5
推荐指数
1
解决办法
7916
查看次数