0

我对 node.js 和 mongo 有点陌生,我遇到了一个小问题。我无法使用客户端上的 ajax 和服务器上的 nodejs/express 将文档批量插入 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(docs) 很好地获取了数据,但我的测试集合是空的。我错过了什么?谢谢

4

2 回答 2

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/

于 2016-10-13T09:24:32.043 回答
0

你可以试试猫鼬变种。它更舒适一些,并且有一些好处。

const mongoose = require('mongoose');

app.post('/2', function(req, res){
  var docs = req.body.data; 
  const Entity = mongoose.model('test', new Schema({}, {strict: false}));
  Entity.insertMany(docs).then(x => res.send(x)).catch(e => res.send(e));
}

您还可以定义 mongoose模式并将 strict 更改为 true 以进行数据库验证。

new Schema({
  foo: String,
  bar: Number
}, {strict: true})
于 2021-08-23T05:31:36.343 回答