2016-03-17 27 views
9

我有文檔列表(對象)該對象具有多個文檔即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". 

我要上傳所有的任何其他方式文件一次....

回答

12

一次不能插入多個文檔。致電CreateDocumentAsync()僅適用於單一文件。

爲了實現這一點,您需要設計一些類型的服務器端存儲過程來完成此操作,然後在單次調用中將您的文檔數組傳遞給函數。您可能需要查看this answer以瞭解其他人如何使用服務器端函數解決此問題,本質上是在本地創建一系列文檔,然後在存儲過程中遍歷數組。因此,建立這樣的事情(從這個答案摘錄):

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

又路過docObject到您的存儲過程。

最終,您的存儲過程仍然會進行單個插入調用,每個文檔一個。但是......你不會有多次網絡往返。插入將是事務性的(如果其中一個插入失敗,或者您拋出異常,其他插入將回滾)。

+0

根據@ david的回答,這裏是一個批量導入存儲過程的示例 - https://github.com/Azure/azure-documentdb-js-server/blob/master/samples/stored-procedures/BulkImport.js –

+0

謝謝,大衛和瑞恩,你的回答對我很有幫助。 –

+0

嘿即時通訊問題執行「ExecuteStoredProcedureAsync」方法我的執行指針轉到「ExecuteStoredProcedureAsync」方法,然後什麼都不會發生,不是例外... –