2017-05-18 10 views
0

Hallo Ich bin Anfänger in Knoten js mongodb. Ich möchte Daten in Mongodb einfügen. Zuerst überprüfe ich Benutzer in der Benutzersammlung, dann Daten einfügen und nach dem vollständigen Prozess dann Callback. Bitte geben VorschlagKnoten js MongoDb Client Bulk Daten einfügen mit Versprechen

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

Antwort

0

Die buld.execute ist nicht erreichbar

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

ja nicht ausführen wird. Wie kann ich –

0

Sie können inserMany() -Methode Massendaten in MongoDB einzufügen.

Beispiel mit dem Versprechen:

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

ausführen, weiß ich viele einfügen. aber vor dem Einfügen kann überprüft werden, ob der Benutzer vorhanden ist oder nicht –

0

ich die Probe gegeben Sie nur Idee, die Möglichkeiten für Einsatz von Massendaten mit Versprechen folgen

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