2015-11-11 5 views
4

Я пытаюсь импортировать мой класс (2500 записей) с Parse.com в индекс Algolia. По умолчанию существует предел 100 записей, которые, очевидно, не работают для меня. Даже если я использую query.limit = 1000;Импортировать класс parse в algolia

Как этот код может использоваться для импорта всего моего класса?

Parse.Cloud.define("createIndex", function(request, response) { 

var algoliasearch = require('cloud/algoliasearch.parse.js'); 
var client = algoliasearch('9PsdfsdWVU7', '3b24e897bfb4esdfsdfsdf209e25c28'); 
var index = client.initIndex('exercises'); 

console.log("running"); 

var objectsToIndex = []; 

//Create a new query for Contacts 
var query = new Parse.Query('Exercises'); 

query.limit = 1000; 
// Find all items 
query.find({ 
    success: function(exercises) { 
     // prepare objects to index from contacts 
     objectsToIndex = exercises.map(function(exercise) { 
      // convert to regular key/value JavaScript object 
      exercise = exercise.toJSON(); 

      // Specify Algolia's objectID with the Parse.Object unique ID 
      exercise.objectID = exercise.objectId; 

      return exercise; 
     }); 

     // Add or update new objects 
     index.saveObjects(objectsToIndex, function(err, content) { 
      if (err) { 
       throw err; 
      } 

      console.log('Parse<>Algolia import done'); 
     }); 
     response.success("worked"); 
    }, 
    error: function(err) { 
     response.error("failed"); 
     throw err; 
    } 
}); 

}); 
+0

Вместо 'find', вы попробовали' each'? – redox

+0

Я получаю 'TypeError: объект не является функцией' на линии над линией 'query.each'. – Taylorsuk

ответ

2

Parse.com имеет предел найти, и все другие ограничения, если вы хотите, чтобы «получить все объекты», вы можете найти более подробную информацию здесь: https://parse.com/docs/js/guide#performance-limits-and-other-considerations

Для вашего текущего номера вы можете сделать это :

Parse.Cloud.define("createIndex", function(request, response) { 
    var algoliasearch = require('cloud/algoliasearch.parse.js'); 
    var client = algoliasearch('9PsdfsdWVU7', '3b24e897bfb4esdfsdfsdf209e25c28'); 
    var index = client.initIndex('exercises'); 

    console.log("running"); 

    //Create a new query for Contacts 
    var Exercises = Parse.Object.extend('Exercises'); 
    var query = new Parse.Query(Exercises); 
    var skip = -1000; 
    var limit = 1000; 

    saveItems(); 

    function saveItems() { 
     skip += limit; 
     query.skip(skip + limit); 
     query.limit(limit); 
     query.find({success: sucess, error: error}); 
    } 

    function sucess(exercices) { 
     if (exercices.length === 0) { 
      response.success("finished"); 
      return; 
     } 


     exercises = exercises.map(function(exercise) { 
      // convert to regular key/value JavaScript object 
      exercise = exercise.toJSON(); 

      // Specify Algolia's objectID with the Parse.Object unique ID 
      exercise.objectID = exercise.objectId; 

      return exercise; 
     }); 

     index.saveObjects(exercises, function(err) { 
      if (err) { 
       throw err; 
      } 

      console.log('Parse<>Algolia import done'); 
      response.success("worked"); 
      saveItems(); 
     }); 

    } 

    function error() { 
     response.error("failed"); 
     throw err; 
    } 
}); 
+0

Это не ограничивает 100 результатов. Мой код работает как ваш пример. По умолчанию возвращается только 100 результатов. Вы можете увеличить это до 1000, однако это все еще недостаточно, если у вас 3000 записей. – Taylorsuk

+0

Хорошо, поэтому предел был на стороне разбора, я обновил ответ – vvo

 Смежные вопросы

  • Нет связанных вопросов^_^