2017-02-16 3 views
0

В nodejs + mongoose, у меня есть схемы и функция:Параллельные Пишет Монго/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, который содержит sensorId и stringDate. Однако, если я отправляю два идентичных «пакета» в скрипт, он хранит две дублированные записи, то есть с теми же dateString и sensorId.

ответ

0

Изменение запроса следующим образом решить эту проблему:

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

       } 
      ); 
Смежные вопросы