Импортировать класс Parse в алголию

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

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

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;
    }
});

});

person Taylorsuk    schedule 11.11.2015    source источник
comment
Вместо find вы пробовали each ?   -  person redox    schedule 12.11.2015
comment
Я получаю TypeError: object is not a function в строке над строкой query.each.   -  person Taylorsuk    schedule 12.11.2015


Ответы (1)


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

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

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;
    }
});
person vvo    schedule 18.11.2015
comment
Это не позволяет обойти ограничение в 100 результатов. Мой код работает так, как ваш пример. По умолчанию возвращается только 100 результатов. Вы можете расширить это число до 1000, однако этого недостаточно, если у вас 3000 записей. - person Taylorsuk; 19.11.2015
comment
Итак, ограничение было на стороне синтаксического анализа, я обновил ответ. - person vvo; 19.11.2015