2017-12-11 7 views
1

私は単にdocumentDB APIの標準サンプルbulkImport sprocを実行しようとしています。オブジェクトの配列を渡すことはできません。私は常に400エラーを取得オブジェクトの配列を送信する明確な方向を与える文書にもかかわらず ..非常にイライラ。DocumentDB:bulkImportストアドプロシージャ - Array/JSONの問題で400エラーを取得する

その他の詳細: 'items'のプロパティで配列のオブジェクトを配列にラップして、それを私のsprocに含めても、同じ悪い要求を示すエラーはオブジェクトまたはJSON-シリアル化された。送信する前にJSON.stringify(docs)を実行しようとすると、反対側で解析できません。

不正リクエスト:ドキュメント本体は、オブジェクトまたはJSON直列化オブジェクトを表す文字列である必要があります。

bulkInsert.js: https://github.com/Azure/azure-documentdb-js-server/blob/master/samples/stored-procedures/BulkImport.js

マイコード(非同期ためdocumentdb-utilの使用):

execProc(docs, insertProc); 
async function execProc(docs, insertProc){ 
    let database = await dbUtil.database('test'); 
    let collection = await dbUtil.collection(database, 'test'); 
    let procInstance = await dbUtil.storedProcedure(collection, insertProc); 
    try{ 
     let result = await dbUtil.executeStoredProcedure(procInstance, docs); 
     console.log(result); 
    } catch(e){ 
     console.log(e.body) 
    } 
} 

ヘッダ

オブジェクト{のCache-Control:「NO- cache "、x-ms-version:" 2017-11-15 "、 ユーザーエージェント:" win32/10.0.16299 Nodejs/v8.9.0 documentdb-nodejs-s ... "、"no-cache" コンテンツタイプ: "application"アプリケーション:json "承認:myauth キャッシュコントロール:" no-cache " コンテンツタイプ:"アプリケーション/ json " ユーザーエージェント:" win32/10.0.16299 Nodejs/v8.9.0 documentdb-nodejs-sdk/1.14.1 " x-ms-date:" Mon、1120年12月11日07:32:29 GMT " X-MS-版: "2017年11月15日"

パス "/ DBS/MYDB/colls/MYCOLL /ストアドプロシージャ/ myBulkInsert"

のparams

アレイ(3)オブジェクト、オブジェクト、オブジェクト] 長さ:3

0:オブジェクト{ID: "0001"、タイプ: "ドーナツ"、名称: "ケーキ"、...}

1:Object {id: "0002"、タイプ: "ドーナツ"、名前: "Raised"、...}

2:オブジェクト{id: "0003"、タイプ: "ドーナツ"、名前: "Old Fashioned "、...}

[{ 
    "id": "0001", 
    "type": "donut", 
    "name": "Cake", 
    "ppu": 0.55 
}, 
{ 
    "id": "0002", 
    "type": "donut", 
    "name": "Raised", 
    "ppu": 0.35 
}, 
{ 
    "id": "0003", 
    "type": "donut", 
    "name": "Old Fashioned", 
    "ppu": 0.25 
}] 

答えて

0

私は同じ問題がありました。ストライプ化して配列を解析し、ストアprocで解析することで動作させることができました。私はgithub上でそのコードが起きた問題を開いた。以下は私のために働いたものです。がんばろう。

----文字列化アレイ

var testArr = [] 
for (var i = 0; i < 50; i++) { 
    testArr.push({ 
     "id": "test" + i 
    }) 
} 
var testArrStr = JSON.stringify(testArr) 

//はprocの保存や店舗PROC に解析するtestArrStrを渡す----少し変更された元BulkImport

exports.storeProcedure = { 
    id: "bulkImportArray", 
    serverScript:function bulkImportArray(docs) { 
     var context = getContext(); 
     var collection = context.getCollection(); 
     var docsToCreate = JSON.parse(docs) 
     var count = 0; 
     var docsLength = docsToCreate.length; 
     if (docsLength == 0) { 
      getContext().getResponse().setBody(0); 
     } 
     var totals = "" 
     function insertDoc(){ 
      var msg = " count=" + count+" docsLength=" +docsLength + " typeof docsToCreate[]=" + typeof docsToCreate+ " length =" + docsToCreate.length 
      if(typeof docsToCreate[count] != 'undefined') { 

       collection.createDocument(collection.getSelfLink(), 
        docsToCreate[count], 
        function (err, documentCreated) { 
         if (err){ 
         // throw new Error('Error' + err.message); 
         getContext().getResponse().setBody(count + " : " + err); 
         }else{ 
          if (count < docsLength -1) { 
           count++;  
           insertDoc(); 
           getContext().getResponse().setBody(msg); 
          } else { 
           getContext().getResponse().setBody(msg); 
          } 
         } 
        }); 
       }else{ 
        getContext().getResponse().setBody(msg); 
       }  

     } 
     insertDoc() 
    } 
} 

あなたがテストしたい場合それはポータルスクリプトエクスプローラで私はエスケープされた文字列を作成する必要があった

var testArr = [] 
    for(var i=200; i<250; i++){ 
    testArr.push({"id":"test"+i}) 
    } 
    var testArrStr = JSON.stringify(testArr) 
    console.log('"'+testArrStr.replace(/\"/g,'\\"') + '"') 
関連する問題