2015-05-29 2 views
4

Я пытаюсь сделать поиска список постов позволяет экономить на firebase так что у меня мой firebse дб как этотfirebase Фильтры и пагинация

{ 
"post": { 
    "postId": { 
     "title": "bla bla bla", 
     "date": "1/1/2015" 
    }, 
    "postId2": { 
     "title": "bla bla bla", 
     "date": "2/1/2015" 
    } 
}} 

Теперь я хочу, чтобы фильтровать по названию, только в темах, что их начинается название с «бла-бла», а затем сделать подкачку и сортировать по дате, так что я сделал этот код:

var posts=new Firebase(URL + "/post"); 
posts=posts.orderByChild("title").startAt("bla bla").endAt("bla bla"+"z");//this will only show posts that starts with bla bla 
posts=posts.orderByChild("date").startAt(10).limitToFirst(10);//this will filter and show only the second page 
posts.on("value", function (raw_data) { 
     //showing the results and more 
}); 

каждый из запросов работает, но когда я положил их вместе я получаю сообщение об ошибке

Query.orderByChild: вы не можете комбинировать несколько вызовов orderBy.

Как это сделать? Я предпочитаю не использовать свой собственный сервер и копировать данные на свой сервер и делать это там

+1

лучший. вопрос. Когда-либо. –

+1

.endAt ('bla bla ~') будет лучше, так как ваш текущий поиск исключает многие совпадения, такие как bla blaze. Теперь, возможно, что более важно, почему? Похоже, вы пытаетесь выполнить рудиментарный поиск. Если это так, я бы рекомендовал [настоящий инструмент поиска] (https://www.firebase.com/blog/2014-01-02-queries-part-two.html). Есть еще одна причина, по которой люди ищут google, а не любые веб-сайты, созданные в инструментах поиска. – Kato

+0

Спасибо, я использую трюк, но «реальный инструмент поиска» - это ElasticSearch, который должен запускаться на моем собственном сервере, поэтому мой сервер не может масштабировать слишком много. –

ответ

0

Существует несколько способов сделать это, но вот один из способов.

Поместите запрос даты в результаты запроса для отправки. Концептуально:

var posts=new Firebase(URL + "/post"); 
posts=posts.orderByChild("title").startAt("bla bla").endAt("bla bla"+"z"); 
posts.on("value", function (raw_data) { 
    //now craft a date query using the results from the posts query 
    // or, it could be filtered in code 
}); 
+0

Если я сделаю это, второй фильтр будет работать на размер клиента, не так ли? поэтому он будет терпеть неудачу со слишком большим количеством сообщений –

+0

Первоначальный вопрос состоял в том, что вы хотели запросить по заголовку, а затем страницу и отсортировать по дате. Название обычно не так много данных, поэтому оно действительно зависит от размера вашего набора данных и/или данных в каждом наборе. – Jay

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