如何在文档数据库中上传多个文档(批量)
How to Upload multiple Document (bulk) in Document DB
我有文档列表(对象),该对象有多个文档,即存在 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".
我想要任何其他方式一次上传所有文档....
一次不能插入多个文档。对 CreateDocumentAsync()
的调用仅适用于单个文档。
为此,您需要设计某种类型的服务器端存储过程来完成此操作,然后在一次调用中将您的文档数组传递给该函数。您可能想查看 this answer 以了解其他人如何使用服务器端函数解决此问题,方法是在本地创建一个文档数组,然后在其存储过程中遍历该数组。所以,创建这样的东西(摘自该答案):
docObject = {
"items": [{doc}, {doc}, {doc}]
}
并将 docObject
传递给您的存储过程。
最终,您的存储过程仍将进行单独的插入调用,每个文档一个。但是......你不会有多次网络往返。并且插入将是事务性的(如果其中一个插入失败,或者您抛出异常,则其他插入将被回滚)。
现在可以使用 Microsoft.Azure.CosmosDB.BulkExecutor 库
一次插入多个文档
https://docs.microsoft.com/en-us/azure/cosmos-db/bulk-executor-dot-net
我有文档列表(对象),该对象有多个文档,即存在 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".
我想要任何其他方式一次上传所有文档....
一次不能插入多个文档。对 CreateDocumentAsync()
的调用仅适用于单个文档。
为此,您需要设计某种类型的服务器端存储过程来完成此操作,然后在一次调用中将您的文档数组传递给该函数。您可能想查看 this answer 以了解其他人如何使用服务器端函数解决此问题,方法是在本地创建一个文档数组,然后在其存储过程中遍历该数组。所以,创建这样的东西(摘自该答案):
docObject = {
"items": [{doc}, {doc}, {doc}]
}
并将 docObject
传递给您的存储过程。
最终,您的存储过程仍将进行单独的插入调用,每个文档一个。但是......你不会有多次网络往返。并且插入将是事务性的(如果其中一个插入失败,或者您抛出异常,则其他插入将被回滚)。
现在可以使用 Microsoft.Azure.CosmosDB.BulkExecutor 库
一次插入多个文档https://docs.microsoft.com/en-us/azure/cosmos-db/bulk-executor-dot-net