2016-07-01 5 views
0

mongodbにオブジェクトを挿入する前にオブジェクトの配列を検証しようとしています。バルク挿入前にDBですべてのデータを検証するmongoose/mongodb

私は何をしようとしていますが、与えられたprodCodeが有効なDBコードであるかないとnameが重複したりするかどうかをチェックし、私がしたい私は、一括挿入呼び出しを行う前に、

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

以下のような物を持って言うことができますされます私はnodebluebird約束を使用しています。

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

を検証するために、次のコードを試してみましたが、私がやりたいすべてのオブジェクト/文書のnameprodCodeが検証されたときにDBにすべてのオブジェクト/文書を挿入しています。

これを達成する方法。

ありがとう

答えて

0

入力オブジェクトを確認してからDB呼び出しを行うように思えます。私は.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) })

限り、あなたのcheckValues方法は約束であるとして、あなたは、入力配列内のすべての値に対してそれを実行して、物事が働いていた知って.thenの成功を使用して、あなたのDBを呼び出すことができます!

関連する問題