英文:
Retrieve firebase data within a range of 1 week
问题
以下是您提供的代码的翻译部分:
我想在一周的范围内检索Firebase数据。我可以查询并获取今天这一天的数据,但是如何查询一周的数据呢?以下是我目前用于检索给定日期数据的代码示例:
String mDate = DateFormat.getDateInstance().format(new Date());
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("expenses").child(onlineUserId);
Query query = reference.orderByChild("date").equalTo(mDate);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
myDataList.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Data data = snapshot.getValue(Data.class);
myDataList.add(data);
}
todayItemsAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我无法找到一种检索给定范围内数据的方法。请有人帮帮我。
请注意,为了便于您理解,我已将您提供的代码部分进行了翻译。
英文:
I want to retrieve Firebase data within a range of say 1 week. I can query and get data for a day like today, but how about for a range of say 1 week? This is the code that am currenly using for retrieving data for a given day
String mDate = DateFormat.getDateInstance().format(new Date());
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("expenses").child(onlineUserId);
Query query = reference.orderByChild("date").equalTo(mDate);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
myDataList.clear();
for (DataSnapshot snapshot :dataSnapshot.getChildren()){
Data data = snapshot.getValue(Data.class);
myDataList.add(data);
}
todayItemsAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
I cannot find a way of retrieving data for a given range. Someone please help.
答案1
得分: 2
实时数据库并非为复杂的类SQL查询而设计。
不确定您的问题是否涉及按周分组的结果。如果您只需要一组从特定日期开始并在另一个日期结束的结果,您可以使用类似于此答案或规范中所述的startAt(...)
和endAt(...)
。
如果您需要比那更复杂的操作,您需要:
-
要么获取所有结果并在前端/应用程序代码中对其进行筛选。
-
要么使用云函数在服务器上进行筛选,并将结果传递给前端。
-
(不推荐)您可以将周数(例如45_2020)作为文档中的单独字段记录下来,并通过该字段进行筛选。这会比较混乱,并且您必须相信前端会在字段中输入正确的信息。
英文:
The Realtime Database is not designed for complex SQL-like queries.
Not sure if your question refers to grouping results by week. If all you need is a set of results that start and on a certain date and end on another date, you can use startAt(...)
and endAt(...)
like described in this answer or the spec.
If you need anything more complex than that, you need to
-
either take all results and filter them in your front end/app code
-
or use a Cloud Function to do the filtering on the server and
passing the results to the front end. -
(Not recommended) You can record the week number (i.e. 45_2020) as a separate field in the document, and filter by that. It's messy and you would have to trust that the front end enters correct info in the field.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论