【问题标题】:Node js mongoDb client bulk insert data using promiseNode js mongoDb客户端使用promise批量插入数据
【发布时间】:2017-10-17 18:47:37
【问题描述】:

您好,我是 node js mongodb 的初学者。我想在 mongodb 中插入数据。首先我检查用户集合中是否存在用户,然后插入数据,完成过程后回调。请给建议

   exports.contactSync = function contactSync(data, userId, callback) {

    var Promise = require('promise');
    MongoClient.connect(Mongo_url, function (err, db) {
    assert.equal(null, err);
    db.collection('contacts').deleteMany({user_id: userId});
       var bulk = db.collection('contacts').initializeOrderedBulkOp(),
            counter = 0;

    data.forEach(function (doc) {
        let promises = [];
        db.collection('users').findOne({email: doc.trim()}, {user_id: 1}).then(function (userData) { 
            promises.push(new Promise(resolve => {
                bulk.insert({user_id: userId, contact_id: userData.user_id});
            }));
        });

        counter++;

        if (data.length == counter) { 
             return Promise.all(promises);
            bulk.execute(function (err, r) {
                // do something with the result
                     console.log("succes");
            });
        }
    }); 

    if (counter > 0) {
        bulk.execute(function (err, result) {
            console.log("succes"); 
            callback({'error': 0, 'message': 'Successfull synchronization', 'data': null, 'status': 200});
            // do something with the result here
        });
    }
    }

【问题讨论】:

    标签: javascript node.js mongodb promise


    【解决方案1】:

    buld.execute 无法访问

    if (data.length == counter) { 
                 return Promise.all(promises);
                bulk.execute(function (err, r) {
                    // do something with the result
                         console.log("succes");
                });
            }
    

    【讨论】:

      【解决方案2】:

      您可以使用 inserMany() 方法将批量数据插入 MongoDB。

      承诺示例:

      Collection1.insertMany(myData)
          .then(function(docs) {
               // do something with docs
          })
          .catch(function(err) {
              // error handling here
          });
      

      【讨论】:

      • 我知道插入很多。但是在插入之前如何检查用户是否存在
      【解决方案3】:

      我给出了你刚刚想到的示例,按照诺言插入批量数据的方法

      //var Q = require('q'); 
      //insertData = [{name: "abcd"},{name: "efgh"},{name: "xyz"}]
      router.post('/', function(req, res) {
          var spec = {};
          var deleteData= req.deleteData;
          Q(spec).then(function(spec) {
           //add your delete records logic
           var deferred = Q.defer();
          var collection = collection_name;
          //here assign your db with collection name
          collection.deleteMany(deleteData, function(err, user) {
              if (!err && user) {
                  spec.delete= user;
                  deferred.resolve(spec);
              } else {
                  spec.message = "Please retry";
                  deferred.reject(spec);
              }
          });
              return deferred.promise;
          }).then(function(spec) {
          var deferred = Q.defer();
          var collection = collection_name;
          //here assign your db with collection name
          collection.insertMany(insertData, function(err, user) {
              if (!err && user) {
                  spec.user = user;
                  deferred.resolve(spec);
              } else {
                  spec.message = "Please retry";
                  deferred.reject(spec);
              }
          });
              return deferred.promise;
          }).then(function(spec) {
              res.json(spec);
              //send your response
          }).fail(function(spec) {
              res.json(spec);
              //send your error response
          });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 2013-11-14
        • 2012-11-20
        • 2020-09-27
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        相关资源
        最近更新 更多