2015-02-03 2 views
4

В отсутствие Parse.Query.random() Я бы в идеале хотел бы сделать:Как найти случайный объект из коллекции Parse.com

query.count.then(function(theCount){ 
    return query.skip(randomNumber%theCount).first(); 
}).then(function(aRandomObjectConformingToQuery){ 
    // Do stuff to the random object. 
}); 

Но рассчитывать операции не рекомендуется и для больших запросов не будет завершена.

Есть ли способ получить случайный объект из подмножества таблицы. например «Получите меня одним из моих пользователей, которого зовут Роджер, поэтому я могу присудить ему приз» из-за приза, first() не работает для меня.

ответ

3

Таким образом, нет query.random(), хотя Parse добавили его в свой список.

В то же время, есть два способа, чтобы получить случайный предмет:

  1. Ведение подсчет ваших объектов и установить query.skip быть случайное число [0, число]
  2. Выполнить запрос к получить все ваши объекты (это может быть невозможно), а затем выбрать случайный из массива.

2 менее подвержен ошибкам, поскольку поддержание количества объектов в Parse является ненадежным, но на самом деле оно не является случайным. В моем случае это работает.

+0

, что если мне нужно запросить для ряда > 1 случайные объекты? Ваш пример ist только для одного случайного объекта. – user1555112

+0

Если вы хотите получить n объектов из случайного индекса, установите query.limit как n, если вы хотите n случайных объектов, вам нужно выполнить операции, которые я описываю n раз. –

0

Это рабочий код для выборки случайных объектов из заданного класса в Parse

В облаке кода

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

query = new Parse.Query(request.params.movie); 

Array.prototype.randomElement = function (min, max) { 
return Math.floor(Math.random() * (max - min + 1)) + min; 
} 


query.find ({ 

success: function(results) { 

     var final10 = []; 

     for (var i = 0; i < 5; i++) { 
      var myRandomElement = results.randomElement(0,results.length); 

      if (final10.indexOf(myRandomElement) == -1) { 
       final10.push(myRandomElement); 
      } else { 
       i--; 
      } 
     } 
     var datalist =[]; 

     for(var j=0;j<final10.length;j++) 
     { 
      var index= final10[j]; 
      datalist.push(results[index]); 
     } 

     response.success(datalist); 
    }, 
    error: function() { 
     response.error(error); 
     } 
    }); 
    }); 

В Android

HashMap<String, Object> params = new HashMap<String, Object>(); 
    params.put("movie", "The Matrix"); 

    ParseCloud.callFunctionInBackground("averageStars", params, new 
     FunctionCallback<ParseObject>() { 
     void done(ParseObject ratings, ParseException e) { 
     if (e == null) { 
      // Do your stuff 
      } 
     } 
    }); 
Смежные вопросы