#javascript #firebase #google-apps-script
# #javascript #огневая база #google-приложения-скрипт
Вопрос:
Я разрабатываю электронную таблицу Google для управления бронированием отелей. Он состоит из двух основных вкладок. Один из них используется для бронирования, а другой — для отправки запросов к уже сделанным бронированиям. Мне удалось заставить его работать просто отлично с помощью встроенных инструментов Google apps script, используя вкладку в качестве базы данных.
Я пытаюсь экспортировать свои данные в базу данных Firebase, но не могу найти, как получить некоторую необходимую мне информацию. Мои данные хранятся с использованием кода, сгенерированного с использованием даты бронирования в целочисленном формате имя человека без пробелов. Это JSON, сгенерированный firebase:
{
"44256001LarissaMeimbergBaraldi" : {
"code" : 44256001,
"date" : "2021-03-01T03:00:00.000Z",
"name" : "Larissa Meimberg Baraldi"
},
"44256001ÍcaroNovodeOliveira" : {
"code" : 44256001,
"date" : "2021-03-01T03:00:00.000Z",
"name" : "Ícaro Novo de Oliveira"
}
}
Мой вопрос таков: предположим, я хочу знать все бронирования, сделанные на день 01 / март / 2021, какой код для меня, чтобы заглянуть внутрь объектов, а затем, если они соответствуют моему поиску, получить нужную мне информацию?
Комментарии:
1. Я думаю, что если вы получите массив объектов из firebase, вам будет намного проще анализировать и запрашивать данные, например [{},{}] , вместо того, чтобы иметь разные свойства объекта для каждого имени.
2. Вы имеете в виду установку одного массива для извлечения всего содержимого базы данных, а затем анализ всей его длины?
Ответ №1:
Я преобразовал JSON в массив объектов, а затем отфильтровал по дате. Добавлены журналы консоли, чтобы проверить, все ли в порядке. Вы можете просмотреть журналы, когда перейдете к просмотру -> выполнение в вашем скрипте. Нажмите на выполнение функции, чтобы просмотреть зарегистрированные объекты.
function myFunction() {
var a ={
"44256001LarissaMeimbergBaraldi" : {
"code" : 44256001,
"date" : "2021-03-01T03:00:00.000Z",
"name" : "Larissa Meimberg Baraldi"
},
"44256001ÍcaroNovodeOliveira" : {
"code" : 44256001,
"date" : "2021-03-01T03:00:00.000Z",
"name" : "Ícaro Novo de Oliveira"
},
"44256002ÍcaroNovodeOliveira" : {
"code" : 44256002,
"date" : "2021-04-01T03:00:00.000Z",
"name" : "Ícaro Dovo de Oliveira"
}
};
var values_a = Object.values(a);
var keys_a = Object.keys(a);
var array_a = keys_a.map((item, index)=> {return {"key": item, "values": values_a[index]};});
console.log(array_a);
var filter_date = "2021-03-01T03:00:00.000Z";
var filtered_a=array_a.filter(item => {return item.values.date === filter_date;})
console.log(filtered_a);
}
Ответ №2:
Спасибо за вашу помощь! Но на самом деле моя точка зрения была немного иной, может быть, я выразился не так ясно.
Пытаясь объяснить вам это, я нашел ответ на свой вопрос. Все это время он был прямо у меня под носом, а я этого не замечал. Вот решение, которое мне было нужно:
Во-первых, я должен назначить моей firebase правило, указывающее, над каким элементом я буду работать, поэтому, если я хочу найти оговорки на основе даты, это будет выглядеть следующим образом:
{
"rules": {
".read": true,
".write": true,
".indexOn":["date"]
}
}
Затем, возвращаясь к моему сценарию, это будет похоже на:
function getReservations() {
var ss = SpreadsheetApp.getActive().getSheetByName('Search');
var date = ss.getRange('C11').getValue();
var firebaseUrl = "https://script-examples.firebaseio.com/";
var base = FirebaseApp.getDatabaseByUrl(firebaseUrl);
var queryParameters = {orderBy:"date", equalTo: date};
var data = base.getData("", queryParameters);
for(var i in data) {
Logger.log(data[i].code, data[i].name, data[i].date);
}
}
Журнал извлекает:
[20-12-08 11:30:33:696 BRT] 44256001 Larissa Meimberg Baraldi 2021-03-01T03:00:00.000Z
[20-12-08 11:30:33:698 BRT] 44256001 Ícaro Novo de Oliveira 2021-03-01T03:00:00.000Z
Эта информация была описана в документации здесь:
Я думаю, что я был немного ошеломлен количеством полученной информации и пропустил эту часть урока.
Большое вам спасибо за ваше время и помощь.