2016-03-17 4 views
9

Ich habe Dokumente Liste (Objekt), dass Objekt mehrere Dokumente hat, dh Json Datensätze vorhanden sind, aber während ich versuche, die Datensätze hochladen nicht auf Dokument DB hochladen aber während ich einzelne Dokumente hochlade, wird sie erfolgreich hochgeladen.Wie mehrere Dokumente (Bulk) in Dokument-DB hochladen

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

obige Code funktioniert nicht .....

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

Dieser Code arbeitet für mich .....

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

ich irgendeine andere Art und Weise möchte alles hochladen Document at Once ....

Antwort

12

Sie können nicht mehr als ein Dokument gleichzeitig einfügen. Der Aufruf an CreateDocumentAsync() ist nur für einzelne Dokumente.

Um dies zu erreichen, müssen Sie eine Art von serverseitig gespeicherten Prozeduren entwickeln, um dies zu erreichen, und dann Ihr Dokument-Array an die Funktion in einem einzigen Anruf übergeben. Vielleicht möchten Sie unter this answer nachsehen, wie jemand anderes dies mithilfe einer serverseitigen Funktion gelöst hat, indem Sie im Wesentlichen ein Array von Dokumenten lokal erstellt und dann das Array in der gespeicherten Prozedur durchlaufen haben. Also, etwas zu schaffen, wie dies (wie aus dieser Antwort exzerpiert):

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

Und vorbei docObject auf Ihre gespeicherten Prozedur.

Letztendlich würde Ihre gespeicherte Prozedur noch einzelne Insert-Aufrufe machen, einen pro Dokument. Aber ... Sie hätten nicht die vielen Netzwerk-Round-Trips. Und die Einfügungen wären transaktional (wenn eine der Einfügungen fehlgeschlagen ist oder Sie eine Ausnahme ausgelöst haben, werden die anderen Einfügungen zurückgesetzt).

+0

Laut @ David Antwort, hier ist ein Beispiel für einen Massenimport gespeicherten Prozedur - https://github.com/Azure/azure-documentdb-js-server/blob/master/samples/stored-procedures/BulkImport.js –

+0

Danke , David und Ryan, deine Antwort ist wirklich hilfreich für mich. –

+0

Hey ich bekomme Problem, "ExecuteStoredProcedureAsync" -Methode auszuführen mein ExecutionPoint-Zeiger geht auf "ExecuteStoredProcedureAsync" -Methode und dann kann nichts passieren, keine Ausnahme ... –