클래스에서 모든 데이터를 가져 오기 위해 루프에서 쿼리하는 방법

비치 데이브

(현재) 1567 개체가있는 클래스가 있습니다. 웹 사이트의 RSS 피드에서 구문 분석 한 기사의 URL, 제목 및 게시 날짜입니다. 클라우드 작업은 주기적이므로 개체가 계속 증가합니다. beforesave에서 고유성을 확인했지만, 때때로 일부 중복 항목이 나타나고 개체의 약 10 %가 중복됩니다.

나는 이러한 중복을 삭제하는 작업을 시도해 왔으며 모든 개체를 한 번에 가져올 수있는 쿼리 논리를 만들고 싶습니다. 쿼리의 최대 제한은 1000입니다. Parse Help에서이 질문을 참조하여 JavaScript 클라우드 코드로 변환하려고했습니다.

Parse.Cloud.job("DeleteDuplicate", function(request, status) {

var query = new Parse.Query(NewsArticle);
var allObjectArray= [];
var limit = 1000;
var skip = 0;
var repeat = true;
query.limit(limit);
query.skip(skip);
do{
    query.find({
        success: function(results) {
            allObjectArray.push(results.concat());
            if(results.length === limit){
                skip = skip+limit;
                query.skip(skip);
                repeat = true;
                console.log("true");
            }else{
                repeat = false;
                console.log("false");
            }
            console.log("Successfully retrieved " + results.length);
        },
        error: function(error) {
            alert("Error: " + error.code + " " + error.message);
            status.error("Error: " + error.code + " " + error.message);
        }
    });
}while(repeat);
    status.success("final length "+allObjectArray.length);
});

작업 상태가 " 클라우드 코드에 연결할 수 없음 "으로 코드가 실패합니다 . 나는 그것이 무한 루프로 가고 2-3 분 후에 시간 초과된다고 생각합니다. 누구든지 도울 수 있다면 좋을 것입니다.

편집 : Promise도움을 사용할 수 있습니까?


편집 2 : 지금 Promise를 시도했습니다-

Parse.Cloud.job("jobFindAll", function(request, status) {

var query = new Parse.Query(NewsArticle);
var allObjectArray= [];
var limit = 1000;
var skip = 0;
var repeat = false;
query.limit(limit);
query.skip(skip);
var promiseList = [];

console.log("in job");
query.find().then(function(results) {
    console.log("results.length "+results.length);
    allObjectArray = results.slice();
    console.log("allObjectArray.length "+allObjectArray.length);
    if(results.length === limit){
        console.log("smaller");
        skip = skip+limit;
        do{
            console.log("first repeat = "+repeat);
            promiseList.push(functionFindAll(allObjectArray, limit, skip));
            console.log("promiseList - "+promiseList);
            repeat = promiseList[promiseList.length-1];
            console.log("looping repeat = "+repeat);
        }while(repeat);
        return Parse.Promise.when(promiseList);
    }else{
        console.log("longer");
    }
}).then(function(){
        console.log("in then");
        status.success("final length "+allObjectArray.length);
    }, function(error) {
        status.error("Error: " + error.code + " " + error.message);
    }
);
});

function functionFindAll(allObjectArray, limit, skip){
var returnPromiseList = [];
var query_new = new Parse.Query(NewsArticle);
query_new.limit(limit);
query_new.skip(skip);
query_new.find().then(function(results) {
    console.log("function results.length "+results.length);
    if(results.length === limit){
        skip = skip+limit;
        query.skip(skip);
        allObjectArray.push(results.concat());
        console.log("true in function");
        return Parse.Promise.as(true);
    }else{
        allObjectArray.push(results.concat());
        return Parse.Promise.as(false);
        console.log("false in function");
    }
},
function(error) {
    console.log("Error: " + error.code + " " + error.message);
    return Parse.Promise.as("ERROR!");
}
);
console.log("below "+allObjectArray.length);
}

이제 코드는 query_new.find ()를 입력하지 않습니다. 기능의 로그 메시지가 나타나지 않고 바로 "아래 ...."메시지가 나타납니다.

웨인

다음 코드는 클래스의 모든 항목을 찾습니다. parse.com에는 또 다른 이상한 제한 호출이 있기 때문에 skip을 사용하지 않습니다 "unable to skip more than 10000 items". objectId 사용을 건너 뜁니다.

Parse.Cloud.job("findAll", function(request, status) {
  var result = [];

  var processCallback = function(res) {
    result = result.concat(res);
    if (res.length === 1000) {
      process(res[res.length-1].id);
      return;
    }

    // do something about the result, result is all the object you needed.
    status.success("final length " + result.length);
  }
  var process = function(skip) {

    var query = new Parse.Query("NewsArticle");

    if (skip) {
      console.log("in if");
      query.greaterThan("objectId", skip);
    }
    query.limit(1000);
    query.ascending("objectId");
    query.find().then(function querySuccess(res) {
      processCallback(res);
    }, function queryFailed(reason) {
      status.error("query unsuccessful, length of result " + result.length + ", error:" + error.code + " " + error.message);
    });
  }
  process(false);
});

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Django 클래스 기반 뷰 : 확장 모델에서 데이터를 가져 오기 위해 ID 대신 사용자 이름을 사용하는 방법

분류에서Dev

Javascript 또는 GAS에서 특정 데이터를 가져 오기 위해 JSON 응답을 루프하는 방법

분류에서Dev

Silverstripe 하위 클래스에서 SiteConfig의 데이터를 가져 오는 방법

분류에서Dev

서버에서 데이터를 가져 오기 위해 차트 라이브러리 클래스를 수정하는 방법

분류에서Dev

하위 쿼리에서 그룹화 된 데이터를 가져 오는 방법

분류에서Dev

graphql을 통해 하위 문서에서 모든 데이터 가져 오기

분류에서Dev

개인 변수를 포함하여 다른 클래스의 클래스에서 선언 된 모든 데이터 변수 목록을 가져 오는 방법

분류에서Dev

Java 클래스에서 kotlin 데이터 클래스를 가져 오는 방법

분류에서Dev

클래스를 사용하여 범위 내에서 텍스트를 가져 오는 방법. (for 루프 내부)

분류에서Dev

데이터베이스에서 변수를 가져 오기 위해 SQL 쿼리를 연결하는 방법은 무엇입니까?

분류에서Dev

클래스를 예측하기 위해 Matlab에서 Weka로 데이터를 가져오고 내보내는 방법은 무엇입니까?

분류에서Dev

단일 문에서 모든 X를 느리게 가져 오기 위해 IEnumerable을 만드는 방법

분류에서Dev

실시간 데이터베이스의 단일 목록보기에서 동시에 모든 하위 항목의 세부 정보를 가져 오는 방법 Firebase

분류에서Dev

neo4j 쿼리 성능을 가져 오기 위해 RAM에 대한 모든 노드 및 관계를 캐시하는 방법

분류에서Dev

결과가 다른 경우 다른 테이블에서 데이터를 가져 오기 위해 쿼리를 실행하는 방법

분류에서Dev

페이징이 발생하기 전에 GridView에서 모든 데이터를 가져 오는 방법

분류에서Dev

PHP에서 데이터베이스의 모든 데이터를 가져오고 표시하는 방법

분류에서Dev

부모 클래스에서 데이터를 가져 오는 방법 (확장하지 않음)

분류에서Dev

모든 "리프"클래스 / 최하위 클래스를 가져 오는 SPARQL 쿼리

분류에서Dev

tkinter의 phpmyadmin에서 행 데이터를 업데이트 / 삭제하기 위해 테이블의 모든 행에 체크 박스를 추가하는 방법

분류에서Dev

Firebase 데이터베이스에서 모든 데이터를 가져 오는 방법은 무엇입니까?

분류에서Dev

Java-데이터베이스에서 모든 행 데이터를 가져 오는 방법

분류에서Dev

ListView에서 모든 자식 데이터를 가져 오는 방법-Firebase 데이터베이스

분류에서Dev

Elastic Search의 모든 샤드에서 데이터를 가져 오는 방법

분류에서Dev

한 클래스를 제외한 모든 클래스에서 패키지 가져 오기를 방지하는 방법은 무엇입니까?

분류에서Dev

chart.js를 사용하여 그래프를 작성하기 위해 서버에서 JSON 데이터를 가져 오는 방법

분류에서Dev

합계를 계산하기 위해 테이블에서 데이터를 가져 오는 SQL SELECT 쿼리

분류에서Dev

Python 3.5.2 : 하위 디렉터리에서 다른 클래스를 가져 오는 클래스 가져 오기

분류에서Dev

ID를 기반으로 문서 아래의 모든 데이터를 가져 오는 방법

Related 관련 기사

  1. 1

    Django 클래스 기반 뷰 : 확장 모델에서 데이터를 가져 오기 위해 ID 대신 사용자 이름을 사용하는 방법

  2. 2

    Javascript 또는 GAS에서 특정 데이터를 가져 오기 위해 JSON 응답을 루프하는 방법

  3. 3

    Silverstripe 하위 클래스에서 SiteConfig의 데이터를 가져 오는 방법

  4. 4

    서버에서 데이터를 가져 오기 위해 차트 라이브러리 클래스를 수정하는 방법

  5. 5

    하위 쿼리에서 그룹화 된 데이터를 가져 오는 방법

  6. 6

    graphql을 통해 하위 문서에서 모든 데이터 가져 오기

  7. 7

    개인 변수를 포함하여 다른 클래스의 클래스에서 선언 된 모든 데이터 변수 목록을 가져 오는 방법

  8. 8

    Java 클래스에서 kotlin 데이터 클래스를 가져 오는 방법

  9. 9

    클래스를 사용하여 범위 내에서 텍스트를 가져 오는 방법. (for 루프 내부)

  10. 10

    데이터베이스에서 변수를 가져 오기 위해 SQL 쿼리를 연결하는 방법은 무엇입니까?

  11. 11

    클래스를 예측하기 위해 Matlab에서 Weka로 데이터를 가져오고 내보내는 방법은 무엇입니까?

  12. 12

    단일 문에서 모든 X를 느리게 가져 오기 위해 IEnumerable을 만드는 방법

  13. 13

    실시간 데이터베이스의 단일 목록보기에서 동시에 모든 하위 항목의 세부 정보를 가져 오는 방법 Firebase

  14. 14

    neo4j 쿼리 성능을 가져 오기 위해 RAM에 대한 모든 노드 및 관계를 캐시하는 방법

  15. 15

    결과가 다른 경우 다른 테이블에서 데이터를 가져 오기 위해 쿼리를 실행하는 방법

  16. 16

    페이징이 발생하기 전에 GridView에서 모든 데이터를 가져 오는 방법

  17. 17

    PHP에서 데이터베이스의 모든 데이터를 가져오고 표시하는 방법

  18. 18

    부모 클래스에서 데이터를 가져 오는 방법 (확장하지 않음)

  19. 19

    모든 "리프"클래스 / 최하위 클래스를 가져 오는 SPARQL 쿼리

  20. 20

    tkinter의 phpmyadmin에서 행 데이터를 업데이트 / 삭제하기 위해 테이블의 모든 행에 체크 박스를 추가하는 방법

  21. 21

    Firebase 데이터베이스에서 모든 데이터를 가져 오는 방법은 무엇입니까?

  22. 22

    Java-데이터베이스에서 모든 행 데이터를 가져 오는 방법

  23. 23

    ListView에서 모든 자식 데이터를 가져 오는 방법-Firebase 데이터베이스

  24. 24

    Elastic Search의 모든 샤드에서 데이터를 가져 오는 방법

  25. 25

    한 클래스를 제외한 모든 클래스에서 패키지 가져 오기를 방지하는 방법은 무엇입니까?

  26. 26

    chart.js를 사용하여 그래프를 작성하기 위해 서버에서 JSON 데이터를 가져 오는 방법

  27. 27

    합계를 계산하기 위해 테이블에서 데이터를 가져 오는 SQL SELECT 쿼리

  28. 28

    Python 3.5.2 : 하위 디렉터리에서 다른 클래스를 가져 오는 클래스 가져 오기

  29. 29

    ID를 기반으로 문서 아래의 모든 데이터를 가져 오는 방법

뜨겁다태그

보관