当前位置: 首页 > 知识库问答 >
问题:

在Azure online上的CosmosDB emulator中插入的文档在CosmosDB中不工作

越新霁
2023-03-14

我正在将一个应用程序从Azure SQL DB迁移到CosmosDB,但在Cosmos DB中存储文档时遇到了问题。

我的应用程序是使用Microsoft.Azure用C#编写的。DocumentDB库。当我使用库Microsoft.Azure中的CreateDocumentSync(Uri,对象)方法时。DocumentDB插入一条记录,该记录通过时没有任何错误。当我使用Azure CosmosDB数据浏览器查询数据库时,我没有看到任何记录,尽管在mongo shell中,count()表示记录存在,而.find()给出了一个错误:

“处理此请求时发生未知服务器错误。”

我使用库微软.Azure.文档数据库来制作各种类型。我用工作的模拟器测试了它。然而,当我试图耦合一个在线宇宙数据库时,我遇到了一个问题,即当我通过方法从库中创建文档Async(Uri,对象)插入文档时,我不再能够在comosDb数据资源管理器中看到插入的文档。

我试图在没有id的情况下插入它,并试图用对象ID插入它_id但是我一直遇到同样的问题。

当我通过mongo shell查看集合时,我确实看到已经添加了一个文档,但是当我使用db.colleciton.find()时,我收到错误:“处理此请求时发生未知的服务器错误。链中更下游的代码能够检索文档。我错过了什么吗?我是否需要在 azure dB 中设置一个设置,或者这是库的已知问题?

class SalesOrder
{
    public string Id { get; set; }

            public string PurchaseOrderNumber { get; set; }

            public DateTime OrderDate { get; set; }

            public string AccountNumber { get; set; }

            public decimal SubTotal { get; set; }

            public decimal TaxAmt { get; set; }

            public decimal Freight { get; set; }

            public decimal TotalDue {get; set;}
    }

class Program
{
    private static readonly string endpointUrl = "endpoint";

    private static readonly string authorizationKey = "authorizationKey";

    private static readonly string databaseId = "databaseId";

    private static readonly string collectionId = "collectionId";

    private static DocumentClient client;

    static void Main(string[] args)
    {
        using (client = new DocumentClient(new Uri(endpointUrl), authorizationKey))
        {
            var collectionLink = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);

            Insert(collectionLink).Wait();
        }
    }

    private static async Task Insert(Uri collectionLink)
    {
        var orders = new List<object>();

        orders.Add(new SalesOrder

        {
            Id = "POCO1",

            PurchaseOrderNumber = "PO18009186470",

            OrderDate = new DateTime(2005, 7, 1),

            AccountNumber = "10-4020-000510",

            SubTotal = 419.4589m,

            TaxAmt = 12.5838m,

            Freight = 472.3108m,

            TotalDue = 985.018m
        });



        orders.Add(new SalesOrder

        {

            Id = "POCO2",

            PurchaseOrderNumber = "PO15428132599",

            OrderDate = new DateTime(2005, 7, 1),

            AccountNumber = "10-4020-000646",

            SubTotal = 6107.0820m,

            TaxAmt = 586.1203m,

            Freight = 183.1626m,

            TotalDue = 4893.3929m,
        });

        foreach (var order in orders)

        {

            Document created = await client.CreateDocumentAsync(collectionLink, order);



            Console.WriteLine(created);

        }
    }
}

共有1个答案

滑令
2023-03-14

问题是您有一个使用MongoDB API的Cosmos DB帐户,但是您试图使用SQL API SDK创建数据。

如果要在需要使用 MongoDB 开发工具包时使用蒙哥数据库 API,而不是宇宙数据库。

但是,如果您正在从Azure SQL迁移,并且没有使用MongoDB API的特定原因,那么您应该只使用CosmosDB SQL API和您已经使用的SDK。如果你这样做,你的问题就会消失。

发生这种情况的原因是SQLAPI SDK正在创建SQLAPI外观的文件,因此CosmosDB MongoDB接口无法在UI中处理它们。

 类似资料:
  • 问题内容: 这是我第一次使用Apache POI,并且已经在该站点上提出了我要问的问题,但是没有给他们明确的答案,所以我别无选择,只能接受您的所有帮助。 我正在尝试编写一个Java程序,该程序从一个文件夹中获取图像并将该图像插入到Word文档中。我正在为此程序使用Apache POI。我在这里发布我的代码。 我可以创建word文档文件,也可以插入文本,但是该行却给我错误,例如“将演员转换为docx

  • 问题内容: 我必须在弹性中插入一个json数组。链接中可接受的答案建议在每个json条目之前插入标题行。答案是2岁,市场上是否有更好的解决方案?我需要手动编辑json文件吗? 问题答案: 好的,那么您可以使用简单的Shell脚本来完成一些非常简单的操作(请参见下文)。这个想法是不必手动编辑文件,而是让Python进行编辑并创建另一个文件格式符合端点期望的文件。它执行以下操作: 首先,我们声明一个小

  • 我们正在使用cosmosdb记录我们的应用程序日志。我们的日志有两层,一层有一般的信息,另一层有一般日志的更详细的信息。我们还在其他两个集合中记录了这些的副本以供备份。所以我们总共有四个系列。在我们的代码中,我们使用异步CreateDocumentAsync来创建这些日志。我们将任务存储在列表中,并使用Task.waitall来完成所有任务。在开发环境中,我们没有看到任何错误,但在生产中,当创建新

  • 我有一个具有以下模式的用户集合: 用户将查找用户。名称,必须是唯一的。添加新用户时,我首先执行搜索,如果没有找到这样的用户,我会将新用户文档添加到集合中。搜索用户和添加新用户(如果未找到)的操作不是原子操作,因此,当多个应用程序服务器连接到DB服务器时,可能会同时收到两个具有相同用户名的添加用户请求,从而导致两个添加用户请求都找不到这样的用户,这反过来会导致两个文档具有相同的“user.name”

  • 我的FiRecovery数据库中有一个名为Reports的集合,我已经在其中添加了文档。但我现在的问题是我想在报表中添加一个带有子集合的文档,有什么想法吗?

  • 我需要向MongoDB插入一个文档并返回新插入的文档。我用了db。集合(“集合名称”)。insertOne(“要插入的数据”)。然后((res)= 错误:未定义ops。 insertOne只返回插入文档的_id,而不是整个文档☹ 但早些时候,它通常返回整个文档。我使用了mongoclient而不是mongoose,在mongoose中它返回整个文档,但我不喜欢使用mongoose。