2017-05-18 54 views
0

嗨,我是初學者在節點js mongodb。我想在mongodb中插入數據。首先我檢查用戶是否存在於用戶集合中,然後是數據插入,並在完成過程後再回調。請給建議節點js 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 
     }); 
    } 
    } 

回答

0

的buld.execute是插入大量數據到MongoDB的可達

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

是的,它是不會執行。如何執行 –

0

你可以使用inserMany()方法。

例如與承諾:

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

我知道插入很多。但在插入之前如何檢查用戶是否存在 –

0

我給出的示例中,您只是想法遵循插入大量數據的方式與承諾

//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 
    }); 
}