2016-07-01 4 views
0

Ich versuche, das Array von Objekten zu validieren, bevor Sie sie in den Mongodb einfügen.Validieren aller Daten mit DB vor dem Bulk einfügen mongoose/mongodb

, was ich versuche zu tun, lässt ich ein Objekt sagen haben wie unter

var data= { prodDetails: 
     [ 
     { measured: 'Liters', 
      name: 'A', 
      prodCode: '713', 
      status: true }, 
     { measured: 'Liters', 
      name: 'B', 
      prodCode: '713', 
      status: true }, 
     { measured: 'Liters', 
      name: 'C', 
      prodCode: '674', 
      status: true } 
] 
}; 

vor einer Masseneinfügung Anruf i überprüfen möchten, ob die gegebene prodCode gültigen DB-Code ist oder nicht, und name vervielfältigt oder nicht

i nodebluebird Versprechen verwenden.

Ich habe versucht, den folgenden Code prodCode

var bulkOperations = { 
    bulkProdInsert: function (body) { 
     return new Promise(function (reslv, rej) { 
      if (body.prodDetails.length > 0) { 
       common_lg.getValueById(body, "typesProd", body.prodDetails[0].prodCode).then(bulkOperations.successCallback(reslv, rej, body)).catch(bulkOperations.errCallback(reslv, rej, body)); 
      }; 
      reslv(); 
     }); 
    }, 

    successCallback: function (reslv, rej, body) { 
     return function (res) { 
      if (res) { 
       body.prodDetails.splice(0, 1); 
       if (body.prodDetails.length > 0) { 
        common_lg.getValueById(body, "typesProd", body.prodDetails[0].prodCode).then(bulkOperations.successCallback(reslv, rej, body)).catch(bulkOperations.errCallback(reslv, rej, body)); 
       } 
      }; 
     }; 
    }, 

    errCallback: function (reslv, rej, body) { 
     return function (err) { 
      body.prodDetails.splice(0, 1); 
      if (body.prodDetails.length > 0) { 
       common_lg.getValueById(body, "typesProd", body.prodDetails[0].prodCode).then(bulkOperations.successCallback(reslv, rej, body)).catch(bulkOperations.errCallback(reslv, rej, body)); 
      }; 
     }; 
    } 
}; 

zu überprüfen, aber ich will, ist tun, um alle Objekte/Dokumente in DB einfügen, wenn name und prodCode aller Objekte/Dokumente validiert.

, wie dies zu erreichen.

dank

Antwort

0

Es klingt wie Sie das Eingabeobjekt überprüfen möchten und dann DB Anrufe tätigen. Ich würde vorschlagen, die .mapmethod of bluebird.

var promise = require('bluebird'); var checkValues = promise.method(function(prod){ if(isValid(prod.prodCode)){ return prod; } //something went wrong! throw new Error('prodCode ' + prod.prodCode + ' is invalid'); } promise.map(data.prodDetails, checkValues) .then(function(){ //it worked! You can call the DB now. }) .catch(function(error){ //something went wrong, look at that error (or pass along) })

Solange Ihre checkValues Methode ein Versprechen ist, können Sie es gegen jeden Wert in der Eingabe-Array ausführen, und verwenden Sie den Erfolg von .then Dinge zu wissen, gearbeitet und Ihre DB anrufen!

Verwandte Themen