我以前从未使用过NoSQL数据库,所以我对它们的工作原理有点困惑。我正在尝试创建一个关于城市景点的数据库。我对每个城市都有一个键和一个值。在每个城市下面,我想要有一个景点列表。
问题是每个景点都需要自己的钥匙。如果我给每个景点分配了自己的键,那么我如何使用一个查询返回一个城市的所有景点呢?难道我不需要为每个键运行一个查询来获取每个值吗?
我基本上是在尝试弄清楚如何设置我的数据库,这样我就可以在London上运行查询,并获得它下面列出的三个项。
发布于 2017-04-15 23:49:37
首先,你必须为你的吸引力创建一个POJO(Plain Old Java Object),其中包含描述等。变量需要与数据库中的键保持一致:
@IgnoreExtraProperties
public class Attraction{
String name, description1, descrition2;
//Other variables/keys
String getName(){
return this.name;
}
void setName(String name){
this.name = name;
}
//Other getter/setter methods
public Attraction(){}
}接下来,您的数据库结构将如下所示:
City
---Attraction Name
------Description 1
------Description 2然后,您可以简单地使用以下命令执行查询:
DatabaseReference ref = databaseReference.child("City").child("London");然后将其与侦听器相结合,以获取吸引人的内容并将其存储在列表中:
List<Attraction> attractions = new ArrayList<>();
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot val : dataSnapshot.getChildren()){
Attraction attraction = val.getValue(Attraction.class);
attraction.setName(val.getKey()); //This is because the key is the attraction name based on the structure
attractions.add(attraction));
}
//After getting all of them in a list, return them
return attractions; //use this if you want to return them as a List Object
return attractions.toArray(new Attraction[attractions.size()]); //use this if you want to return it as an array
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
})如果这对你有帮助,请告诉我。
https://stackoverflow.com/questions/43427985
复制相似问题