2017-02-06 5 views
0

Это моя структура данных в базе данныхСортировка запросов по глубоким путям с переменным ключом

"2017" : { 
    "metadata" : { 
     "February" : { 
     "-Kc3BF0V1iLgtnI65LuR" : { 
      "date" : "2017-02-04T13:36:38.311Z", 
      "price" : 80 
     }, 
     "-Kc3BF0V1xxfrtnI65OlS" : { 
      "date" : "2017-02-11T13:36:38.311Z", 
      "price" : 70 
     }, 
     "-Kc3BF0V1xxfrtnIOZozp" : { 
      "date" : "2017-02-03T13:36:38.311Z", 
      "price" : 90 
     } 
     }, 
     "January" : { 
     "-Kc3E5bpxpo3RpSHH3fn" : { 
      "date" : "2017-01-01T13:50:12.264Z", 
      "price" : 45 
     }, 
     ... 
     } 
    } 
    } 

Я показываю эти данные в списке в моем ионном приложении как так

February 
+ 2017-02-04 
+ 2017-02-11 
+ 2017-02-03 
January 
+ 2017-01-01 

Сейчас я для сортировки данных в соответствии месяцы, поэтому данные в соответствии с февраля станут

February 
+ 2017-02-03 
+ 2017-02-04 
+ 2017-02-11 

Я read in the firebase blog, что они Добавлена ​​функциональность, которую вы можете заказывать по глубоким путям. Но я не могу найти, как вы можете запросить его, когда у вас есть динамический ключ, в моем случае месяцы - это динамические клавиши. Поскольку каждый ребенок месяца нужно сортировать по дате.

я извлечение данных из firebase с этим фрагментом

var dbRef = firebase.database().ref(year + '/metadata/').orderByChild('date'); //How to order by date if my month is variable? 
return firebaseObject(dbRef); 

Я также попытался упорядочением в угловом с помощью OrderBy фильтра, но это не будет работать, как это должно быть массивом. Я нашел blog, где они преобразуют его в массив, но вы потеряете ключ, и мне все еще нужно это, потому что список будет доступен для клика, чтобы я мог перейти на его страницу сведений. Также я не думаю, что сортировка на интерфейсе - хорошая идея.

ответ

0

Запросы базы данных Firebase могут содержать только один динамический путь: дочерний объект непосредственно под местом, где вы запрашиваете. В то время как orderByChild() может идти по пути к свойству, на котором можно заказать данные, этот путь должен быть статическим.

Это означает, что если вы хотите запросить метаданные через все месяцы по дате, вы должны сохранить список метаданных через все месяцы:

"metadataList" : { 
    "-Kc3BF0V1iLgtnI65LuR" : { 
     "date" : "2017-02-04T13:36:38.311Z", 
     "price" : 80 
    }, 
    "-Kc3BF0V1xxfrtnI65OlS" : { 
     "date" : "2017-02-11T13:36:38.311Z", 
     "price" : 70 
    }, 
    "-Kc3BF0V1xxfrtnIOZozp" : { 
     "date" : "2017-02-03T13:36:38.311Z", 
     "price" : 90 
    } 
    "-Kc3E5bpxpo3RpSHH3fn" : { 
     "date" : "2017-01-01T13:50:12.264Z", 
     "price" : 45 
    }, 
    ... 
} 
+0

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

+0

Исправить. Поэтому, если вы хотите использовать этот прецедент, вы также должны * хранить список данных по месяцам. В базах данных NoSQL вы часто дублируете данные, чтобы разрешить использование приложений, которые необходимы вашему приложению. Я рекомендую читать [Моделирование данных NoSQL] (https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/) и смотреть [разработчики Firebase для SQL] (https://www.youtube .com/плей-лист? список = ФАПЧ K7zZEsYLlP-к-RKFa7RyNPa9_wCH2s). –

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