2017-02-16 73 views
0

nodejs + mongoose,我有這樣的架構和功能:併發寫入蒙戈/貓鼬創建重複

var storeSchema = new Schema({  
    sensor_id: {type: String, required: true}, 
    dateString: {type: String, required:true}, 
    created: {type: Date}, 
    values:  {} 
}); 
    storeSchema.index({sensor_id:1,dateString:1},{unique:true}); 
// sensorId and stringDate come from outside 
// 
function(sensorId,stringDate) 
{ 
    Store.findOneAndUpdate(
       { 
        sensor_id: sensorId, 
        dateString:stringDate,      
       }, 
       updated, 
       { 
        new:false 
       }, 
       function(err, sensorResult){ 
        if(err){ 
         console.log(err); 
         return; 
        } 
        else 
        { 
         if (sensorResult === null) 
         { 
          var newRecord = {          
            sensor_id:sensorId, 
            dateString:stringDate, 
            created:new Date(), 
          }; 

          Store.create(newRecord,function(err){ 
          });       
         }       
        } 
       } 
      ); 
    } 

我的腳本只檢查記錄是否存在:如果不是,它會創建一個新的記錄,否則更新舊的。 要保存的數據來自另一個腳本(基本上是一個服務器)。

數據包是一個JSON對象,它包含sensorIdstringDate。 但是,如果我向腳本發送兩個相同的「數據包」,它將存儲兩個重複的記錄,即具有相同的dateString和sensorId。

回答

0

更改查詢如下解決問題:

Store.findOneAndUpdate(
       { 
        sensor_id: sensorId, 
        dateString:stringDate,      
       }, 
       updated, 
       { 
        upsert:true 
       }, 
       function(err, sensorResult){ 
        if(err){ 
         console.log(err); 
         return; 
        } 
        else 

       } 
      );