0

고유 한 레코드가 필요하지만 'saveinbackground'로 인해 클라이언트의 간단한 find()가 작업을 수행하지 않았습니다. bSavingInbackGround와 같은 부울을 추가 및 설정하고 추가 저장을 생략해도 내 앱이 중복을 만들지 않도록 방지 할 수 있습니다.구문 분석 데이터베이스를 사용하는 동안 고유 키를 보장하는 방법

고유 키가 많은 (다중 사용자) 상황에서 매우 유용함을 확인하십시오.

Parse CloudCode가 올바른 방법이지만 적절한 해결책을 찾지 못했습니다.

답변

0

일부 트레일 및 오류 테스트를 마친 후 드디어 클라우드 코드를 사용하여 작동하게되었습니다. 다른 사람들을 돕기를 바랍니다.

내 '테이블'은 myObjectClass이고 고유해야 할 필드는 'myKey'입니다. main.js에 이것을 추가하여 서버 클라우드 코드를 파싱합니다.

Parse.Cloud.beforeSave("myObjectClass", function(request, response) { 
var myObject = request.object; 

if (myObject.isNew()){ // only check new records, else its a update 
    var query = new Parse.Query("myObjectClass"); 
    query.equalTo("MyKey",myObject.get("myKey")); 
    query.count({ 
     success:function(number){ //record found, don't save 
      //sResult = number; 
      if (number > 0){ 
       response.error("Record already exists"); 
      } else { 
       response.success(); 
      } 
     }, 
     error:function(error){ // no record found -> save 
      response.success(); 
     } 
    }) 
} else { 
    response.success(); 
} 
}); 
0

접근 방식이 올바른 방법이지만, 성능 관점에서, 나는 query.first()를 사용하여 생각하면 즉시 중지됩니다 query.first() 이후 query.count()보다 빠른 : 변경은 MyObjectClass와 '의 mykey'는 사용자의 요구에 맞게 일치하는 레코드를 찾습니다. 반면 query.count()은 일치하는 레코드 수와 일치하는 전체 클래스 레코드를 거쳐야합니다. 거대한 클래스가 있으면 비용이 많이 듭니다.