如何在文档数据库中上载多个文档(批量)

时间:2016-03-17 14:15:58

标签: azure azure-cosmosdb

我有文件列表(对象),该对象有多个文件,即Json记录存在,但是当我尝试上传文件串(记录)时,它不会上传到文档数据库,但是当我上传单个文档记录时,它会成功上传。

  List<MyModelClass> listObj = new List<MyModelClass>();
  Document doc = await DocumentClient.CreateDocumentAsync("dbs/" + DocumentDatabase.Id + "/colls/" + DocumentCollection.Id, listObj);

上面的代码无效......

   foreach (var item in listObj )
    {
      Document doc = await Client.CreateDocumentAsync("dbs/" + DocumentDatabase.Id + "/colls/" + DocumentCollection.Id, item);
    }

这段代码对我有用.....

 Syntax : CreateDocumentAsync(String, Object, RequestOptions, Boolean)
 Object :- Document object // I Know it as per syntax it need to be "Document Type".

我想要任何其他方式一次上传所有文档....

3 个答案:

答案 0 :(得分:14)

您不能一次插入多个文档。对CreateDocumentAsync()的调用仅适用于单个文档。

要实现此目的,您需要设计某种类型的服务器端存储过程来完成此操作,然后在一次调用中将文档数组传递给该函数。您可能希望查看this answer以查看其他人如何使用服务器端函数解决此问题,实质上是在本地创建文档数组,然后在其存储过程中遍历数组。所以,创建这样的东西(摘自该答案):

docObject = {
  "items": [{doc}, {doc}, {doc}]
}

docObject传递给您的存储过程。

最终,您的存储过程仍然会进行单独的插入调用,每个文档一个。但是......你不会有多次网络往返。插入将是事务性的(如果其中一个插入失败,或者您抛出异常,则其他插入将被回滚)。

答案 1 :(得分:1)

现在可以使用 Microsoft.Azure.CosmosDB.BulkExecutor 库一次插入多个文档

https://docs.microsoft.com/en-us/azure/cosmos-db/bulk-executor-dot-net

答案 2 :(得分:-8)

我认为您可能正在寻找DocumentClient.CreateDocumentCollectionAsync方法。