解析对象 Save() 插入重复记录
Parse Object Save() Inserting Duplicated Records
我有一个带有插入功能的 Parse 应用程序,它保存一个对象 (Audit),然后在 javascript 数组上使用 foreach 循环保存子对象 (DetailAudit)。
问题是有时此函数会在数据库中插入多个子记录 (DetailAudit)。
我试图在插入新记录之前查询是否存在子记录,但是在实际查询之前执行了 save() 方法。
插入方法是这样的:
function insert(form,handler){
var audit = new Audit();
audit.set("type",Type.createWithoutData(form.auditoria));
audit.set("folio",form.folio.toUpperCase());
audit.set("start",moment(form.inicio, 'DD/MM/YYYY').toDate());
audit.set("end",moment(form.fin, 'DD/MM/YYYY').toDate());
audit.set("objectives",form.objetivos);
audit.set("goals",form.alcances);
audit.set("audits",form.auditores);
audit.set("auditTest",User.createWithoutData(form.auditorTest));
audit.set("auditLeader",User.createWithoutData(form.auditorLider));
audit.set("group",form.grupo);
audit.save().then(function(audit){
var procesos = form.tab;
procesos.forEach(function(item) {
// Here I tried to query for the existence but didn't work
var detail = new DetailAudit();
detail.set("process",AuditProcess.createWithoutData(item.procesoId));
detail.set("clauses",item.clausulas);
detail.set("standar",Standar.createWithoutData(item.estandarId));
detail.set("area",Area.createWithoutData(item.areaId));
detail.set("auditor",User.createWithoutData(item.auditorId));
detail.set("method",item.metodologia);
detail.set("comment",item.comentario);
detail.set("questions",0);
detail.set("grade",0);
detail.set("comment",item.comentario);
detail.set("audit",audit);
detail.save({
success:function(detail){
var pros = new ProcessScheme();
pros.set("title","EQUIPO, INSTALACIÓN Y MATERIALES")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","ENTRADAS")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","SALIDAS")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","INFORMACIÓN DOCUMENTADA")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","INDICADORES DE DESEMPEÑO")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","CONOCIMIENTOS, ENTRENAMIENTO Y HABILIDADES")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","ANÁLISIS DE RIESGO")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
},
});
var audits = [];
audits.push(User.createWithoutData(item.auditorId))
if(audits.length == procesos.length){
audit.set("audits",audits);
audit.save();
}
});
sendEmail(audit);
handler({status:200,msn:"Auditoría creada exitosamente",res:audit});
}).catch(function(error){
handler({status:500,msn:"Error al crear usuario",res:error});
});
}
正如我所说,我试图在插入之前查询 DetailAudit 对象是否存在,但查询总是 returns 空结果。
这个项目刚到我手上我真的迷失在这个解析服务器主题上,任何建议都会有所帮助。
您可以创建一个 mongo unique index 以确保您的 collection 的唯一性。这将防止重复插入。
db.collection.createIndex( <key and index type specification>, { unique: true } )
在您的情况下,您可以在 'title' 和 'audit' 上创建一个关于 'Detail Audit' 的唯一索引,以确保每个审计只有唯一的标题。
db.collection.createIndex({'title':1,'_p_audit':1}, { unique: true } )
您还可以通过以下方式使用 Parse 保存多个 objects:
Parse.Object.saveAll([arrayOfObjects])
我有一个带有插入功能的 Parse 应用程序,它保存一个对象 (Audit),然后在 javascript 数组上使用 foreach 循环保存子对象 (DetailAudit)。
问题是有时此函数会在数据库中插入多个子记录 (DetailAudit)。
我试图在插入新记录之前查询是否存在子记录,但是在实际查询之前执行了 save() 方法。
插入方法是这样的:
function insert(form,handler){
var audit = new Audit();
audit.set("type",Type.createWithoutData(form.auditoria));
audit.set("folio",form.folio.toUpperCase());
audit.set("start",moment(form.inicio, 'DD/MM/YYYY').toDate());
audit.set("end",moment(form.fin, 'DD/MM/YYYY').toDate());
audit.set("objectives",form.objetivos);
audit.set("goals",form.alcances);
audit.set("audits",form.auditores);
audit.set("auditTest",User.createWithoutData(form.auditorTest));
audit.set("auditLeader",User.createWithoutData(form.auditorLider));
audit.set("group",form.grupo);
audit.save().then(function(audit){
var procesos = form.tab;
procesos.forEach(function(item) {
// Here I tried to query for the existence but didn't work
var detail = new DetailAudit();
detail.set("process",AuditProcess.createWithoutData(item.procesoId));
detail.set("clauses",item.clausulas);
detail.set("standar",Standar.createWithoutData(item.estandarId));
detail.set("area",Area.createWithoutData(item.areaId));
detail.set("auditor",User.createWithoutData(item.auditorId));
detail.set("method",item.metodologia);
detail.set("comment",item.comentario);
detail.set("questions",0);
detail.set("grade",0);
detail.set("comment",item.comentario);
detail.set("audit",audit);
detail.save({
success:function(detail){
var pros = new ProcessScheme();
pros.set("title","EQUIPO, INSTALACIÓN Y MATERIALES")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","ENTRADAS")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","SALIDAS")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","INFORMACIÓN DOCUMENTADA")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","INDICADORES DE DESEMPEÑO")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","CONOCIMIENTOS, ENTRENAMIENTO Y HABILIDADES")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
var pros = new ProcessScheme();
pros.set("title","ANÁLISIS DE RIESGO")
pros.set("content","....")
pros.set("detail",detail)
pros.save();
},
});
var audits = [];
audits.push(User.createWithoutData(item.auditorId))
if(audits.length == procesos.length){
audit.set("audits",audits);
audit.save();
}
});
sendEmail(audit);
handler({status:200,msn:"Auditoría creada exitosamente",res:audit});
}).catch(function(error){
handler({status:500,msn:"Error al crear usuario",res:error});
});
}
正如我所说,我试图在插入之前查询 DetailAudit 对象是否存在,但查询总是 returns 空结果。
这个项目刚到我手上我真的迷失在这个解析服务器主题上,任何建议都会有所帮助。
您可以创建一个 mongo unique index 以确保您的 collection 的唯一性。这将防止重复插入。
db.collection.createIndex( <key and index type specification>, { unique: true } )
在您的情况下,您可以在 'title' 和 'audit' 上创建一个关于 'Detail Audit' 的唯一索引,以确保每个审计只有唯一的标题。
db.collection.createIndex({'title':1,'_p_audit':1}, { unique: true } )
您还可以通过以下方式使用 Parse 保存多个 objects:
Parse.Object.saveAll([arrayOfObjects])