2013-10-28 155 views
0

我有點新node.js和mongo,我有一個小問題。我無法使用客戶端上的ajax和服務器上的nodejs/express批量將文檔插入到mongodb中。這裏是我的客戶端代碼:Node.js mongodb批量插入

<button class="btn>Send</button> 
data = {'test':'test1','test':'2','test':'test1','test':'test2','test':'test1','test':'test2'} 

     $(".btn").click(function(){ 
      $.ajax({ 
       url: 'http://localhost:8000/2', 
       type: 'post', 
       dataType: 'json', 
       data: data 
      }); 
     }); 

,這裏是在節點我的路由處理:

app.post('/2', function(req, res){ 
var docs = []; 
for(var i = 0; i < 10000; i++) { 
    docs[i] = req.body; 
} 

db.collection('test', function(err, collection){ 
    collection.insert(docs, function(err, result) { 
     if (!err) { 
      console.log(result); 
      res.end(); 
     } else { 
      throw err 
     } 
    }) 
}); 

})

我越來越用的console.log(文檔很好的數據),但我的測試集合是空的。我錯過了什麼?謝謝

+0

我懷疑它可能與你試圖插入數組的事實。相反,只需插入原始JSON數據即可。 docs = req.body.data – avrono

+0

一次插入單個項目時它工作嗎?即你確定你已經正確建立了與mongo的連接,你有寫作者權限等等? – ksimons

+0

哇這是尷尬的,原來我的數據庫參數是不正確的......對不起,打擾你們所有人。 – Case09

回答

0
app.post('/2', function(req, res){ 
    var docs = req.body.data; // ur json data is now in node end   
    var i=0; 
    var bulk = test.collection.initializeUnorderedBulkOp(); // test is the  model name. I used mongoose 
    // now using loop insert all json data inside bulk variable 
    for (i = 0; i < docs.length; i += 1) { 
    bulk.insert(docs[i]); 
    } 

    //after insertion finished u might need node-async module, to insert first 
    //then asynchronously execute bulk 
    bulk.execute(function (errx) { 
     if (errx) { return next(errx); } 
        console.log('Success'); 
      }); 
}) 

您需要正確定義測試模式和測試模型。 欲瞭解更詳細的信息,你可以閱讀以下鏈接 https://docs.mongodb.com/manual/reference/method/Bulk.insert/