Для существующих совпадений используйте query
:
df.query(' A > 3' ).head(1)
Out[33]:
A B C
2 4 6 3
df.query(' A > 4 and B > 3' ).head(1)
Out[34]:
A B C
4 5 4 5
df.query(' A > 3 and (B > 3 or C > 2)' ).head(1)
Out[35]:
A B C
2 4 6 3
Объединение двух дат не делает многого с точки зрения облегчения запроса базы данных.
Если вы ищете динозавров в отпуск на определенную дату, они могли бы отправиться в отпуск в любое время до эта дата. (Если не существует политики, которая предусматривает максимальное количество дней в отпуске.) Таким образом, конечная дата, вероятно, вы хотите запросить:
{
"lambeosaurus": {
"vacationStart" : "2016-12-20",
"vacationEnd" : "2016-12-25",
"length" : 12.5,
"weight": 5000
},
"stegosaurus": {
"vacationStart" : "2016-12-10",
"vacationEnd" : "2016-12-20",
"length" : 9,
"weight" : 2500
}
}
Любые динозавры с vacationEnd
вкл. Или после 2016-12-20
будет в отпуске в эту дату, если vacationStart
включен или раньше 2016-12-20
:
function getHolidayingDinosaurs(day) {
return firebase.database()
.ref("dinousaurs")
.orderByChild("vacationEnd")
.startAt(day)
.once("value")
.then((snapshot) => {
let holidaying = [];
snapshot.forEach((child) => {
let val = child.val();
if (val.vacationStart <= day) {
holidaying.push(val);
}
});
return holidaying;
});
}
getHolidayingDinosaurs("2016-12-20").then((holidaying) => console.log(holidaying));
Не существует прямой альтернативы для дальнейшей фильтрации на клиенте, поскольку вы можете запросить только Firebase с использованием одного свойства, а комбинированные даты не особенно полезны, так как начало и конец могут быть любыми датами до или после даты запроса.
В любом случае, запрос с использованием vacationEnd
скорее всего, будет выполнять большую часть фильтрации на сервере - если у вас не будет много динозавров, которые планируют свои отпуска заблаговременно.
Если вышеупомянутый подход приводит к тому, что слишком много информации извлекается и фильтруется на клиенте , вы могли бы приложить дополнительные усилия и могли бы сохранить собственное картографирование отдыхающих динозавров, сохранив некоторые дополнительные данные, структурированные следующим образом:
"holidays": {
...
"2016-12-19": {
"stegosaurus": true
},
"2016-12-20": {
"lambeosaurus": true,
"stegosaurus": true
},
"2016-12-21": {
"lambeosaurus": true
},
...
}
Многоуровневая система Firebase (в этом случае [more]] [answer] :
firebase.database().ref().update.({
"dinosaurs/lambeosaurus": {
"vacationStart" : "2016-12-20",
"vacationEnd" : "2016-12-25",
"length" : 12.5,
"weight": 5000
},
"holidays/2016-12-20/lambeosaurus": true,
"holidays/2016-12-21/lambeosaurus": true,
"holidays/2016-12-22/lambeosaurus": true,
"holidays/2016-12-23/lambeosaurus": true,
"holidays/2016-12-24/lambeosaurus": true,
"holidays/2016-12-25/lambeosaurus": true
});
. Запрос на holidays/2016-12-20
был бы затем верните объект с ключами для каждого отдыхающего динозавра.
Я рекомендую хранить данные по-другому. Используйте один атрибут для «vacationStart» и один для «vacationEnd». All all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all будет использовать запрос:
var query = firebase.database().ref('dinousaurs').orderByChild('vacationStart').equalTo('2016-12-20');
update
:let key = firebase.database().ref().push().key
(обратите внимание, что это не коснется базы данных, все это происходит на клиенте). – cartant 5 January 2017 в 06:02