在 CosmosDB 模拟器中插入的文档在 Azure 在线的 CosmosDB 中不起作用

Documents inserting in CosmosDB emulator not working in CosmosDB on Azure online

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

我的应用程序是使用 Microsoft.Azure.DocumentDB 库用 C# 编写的。 当我使用库 Microsoft.Azure.DocumentDB 中的方法 CreateDocumentAsync(Uri, object) 插入记录时,它会顺利完成。 当我使用 Azure CosmosDB 数据资源管理器查询数据库时,我没有看到任何记录,尽管在 mongo shell 中 count() 表示记录在那里并且 .find() 给出错误 "Unknown server error occurred when processing this request."

我使用库 Microsoft.Azure.DocumentDB 制作了一些杂物。我用运行良好的模拟器对其进行了测试。但是,当我尝试连接在线 cosmosDB 时,我遇到了一个问题,即当我通过库中的方法 CreateDocumentAsync(Uri, object) 插入文档时,我再也无法在 comosDb dataexplorer 中看到插入的文档。

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

当我通过 mongo shell 查看集合时,我确实看到已经添加了一个文档,但是当我使用 db.colleciton.find() 时,我得到了错误:"Unknown server error occurred when processing this request." 链下游的代码能够检索文档。我错过了什么吗?我是否需要在 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);

        }
    }
}

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

如果您想在需要使用 MongoDB SDK 而不是 Cosmos DB 时使用 MongoDB API。

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

它发生的原因是因为 SQL API SDK 正在创建 SQL API 查找文件,所以 CosmosDB MongoDB 接口不能在 UI.

中处理它们