在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){
});
}
}
}
);
}
我的脚本只检查是否存在记录:如果不存在,则创建新记录,否则更新旧记录。 要保存的数据来自另一个脚本(基本上是服务器)。
数据包是一个包含sensorId
和stringDate
的JSON对象。
但是,如果我向脚本发送两个相同的“数据包”,它会存储两个重复的记录,即具有相同的dateString和sensorId。
答案 0 :(得分:0)
如下更改查询解决了问题:
Store.findOneAndUpdate(
{
sensor_id: sensorId,
dateString:stringDate,
},
updated,
{
upsert:true
},
function(err, sensorResult){
if(err){
console.log(err);
return;
}
else
}
);