我想添加一个简单的搜索字段,想使用类似的东西
collectionRef.where('name', 'contains', 'searchTerm')
我尝试过使用where('name', '==', '%searchTerm%'),但它没有返回任何东西.
我已经阅读了有关优先级的Firebase文档,但我认为我还没理解.
我想我明白它与查询和排序数据有关.给我的问题(和答案)一些重量,在什么情况下你可能会使用优先级?
从我读过的文档中,您可以在某个引用中设置值时设置优先级,然后在查询引用优先级时根据其类型和值确定顺序.这听起来有些道理,但我并不十分了解它.
我正在使用Firebase构建社交应用.我在Firebase中存储帖子,如下所示:
posts: {
"postid": {
author: "userid"
text: "",
date: "timestamp"
category: "categoryid"
likes: 23
}
}
Run Code Online (Sandbox Code Playgroud)
每个帖子属于一个类别,可以喜欢帖子.
现在,我正在尝试显示属于特定类别的帖子,按喜欢的数量排序.我可能还希望按日期限制过滤器,以仅显示类别中最近,最喜欢的帖子.我怎样才能做到这一点?
Firebase查询功能似乎不支持这样的多个查询,这看起来很奇怪......
情况:
我目前使用以下代码按时间顺序加载最新帖子:
码:
$scope.data = [];
var _n = Math.ceil(($(window).height() - 50) / (350)) + 1;
var _start = <%= lastID %>;
var firstElementsLoaded = false;
$scope.getDataset = function() {
fb.orderByChild('id').startAt(_start).limitToFirst(_n).on("child_added", function(dataSnapshot) {
_start = dataSnapshot.child("id").val() + 1;
console.log("LAST TRUE ID:"+ _start);
$scope.data.push(dataSnapshot.val());
$scope.$apply()
console.log("THE VALUE:"+$scope.data);
firstElementsLoaded = true;
});
};
$scope.getDataset();
Run Code Online (Sandbox Code Playgroud)
题:
我应该如何修改它基本上具有完全相同的行为,但只根据按时间顺序查询分数大于100的帖子?
更新:
我终于找到了一种方法来使用我的架构"创建另一个索引"方法.但仍存在一个障碍:
我在Firebase中有此列表
"games":{
"-Kaaaaaaaaaaaaaaaas" : {
"name" : "name_a"
},
"-Kbbbbbbbbbbbbbbbbs" : {
"name" : "name_b"
},
"-Kccccccccccccccccs" : {
"name" : "name_c"
},
"-Kdddddddddddddddds" : {
"name" : "name_d"
},
}
Run Code Online (Sandbox Code Playgroud)
我只想查询其中两个游戏.我有他们的钥匙:
"-Kaaaaaaaaaaaaaaaas"
"-Kbbbbbbbbbbbbbbbbs"
Run Code Online (Sandbox Code Playgroud)
我想这样做:
WHERE key="-Kaaaaaaaaaaaaaaaas" OR key="-Kbbbbbbbbbbbbbbbbs"
...
WHERE key IN ("-Kaaaaaaaaaaaaaaaas" , "-Kbbbbbbbbbbbbbbbbs")
Run Code Online (Sandbox Code Playgroud)
或使用Firebase代码:
var gamesRef = ref.child("games");
var query = gamesRef.orderByKey().equalTo("-Kaaaaaaaaaaaaaaaas" , "-Kbbbbbbbbbbbbbbbbs", ...);
var list = $firebaseArray(query);
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为equalTo只能接受:
equalTo(String value, String key)
equalTo(double value)
equalTo(double value, String key)
equalTo(String value)
equalTo(boolean value, String key)
equalTo(boolean …Run Code Online (Sandbox Code Playgroud) 在HashMap中检索组密钥后,如何执行连接查询,该查询仅显示grp具有该特定用户成员的那些详细信息.如果这种结构错误,请帮助我.
结构体:

我想从用户输入名字和姓氏的数据库中获取所有人员。
到目前为止,这是我的代码:
admin.database().ref('persons').orderByChild('Firstname').equalTo(firstName).limitToLast(1).once("value").then(function(snapshot) {
}
Run Code Online (Sandbox Code Playgroud)
这段代码只能过滤名字,但是我找不到任何为姓添加其他Where子句的方法。我试图添加另一个orderBy,但它似乎不起作用。实时数据库是否必须很难进行简单的查询?
假设我有这样的结构:
-users
-user1_uid
name
distance
age
Run Code Online (Sandbox Code Playgroud)
我如何进行查询(查找距离<100且年龄介于20到25之间的用户)?
我试过标准方法
let recentPostsQuery = (ref?.child("users").queryOrderedByChild("age").queryStartingAtValue("20"))!
Run Code Online (Sandbox Code Playgroud)
问题是,这似乎不可能查询多个孩子(如结合年龄和距离过滤).几个月前与Firebase相比,这方面有什么变化吗?我相信,在第一次查询后在本地过滤它们不是一种选择,因为可能存在数千个对象.
我正在尝试检索仅在到达日期和机场匹配时返回航班数据的数据.我似乎无法找到最佳解决方案.我只能在机场或抵达日期相同的情况下提取数据,而不是两者(只能使用equalTo()一次).这是我当前的Java代码:
Firebase ref = mFirebaseRef.child(FirebaseReference.CHILD_FLIGHTS);
Query queryRef = ref.orderByChild("airport").equalTo(getAirport());
queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(TAG + " datasnapshot is equal to " + dataSnapshot);
}
}
Run Code Online (Sandbox Code Playgroud)
这是数据本身:
{
"flight":{
"1ddf3c02-1f2e-4eb7-93d8-3d8d4f9e3da2":{
"airport":"Gothenburg, Sweden - Landvetter (GOT)",
"arrivalDate":"2016-06-21",
"arrivalTime":"20:58",
"code":"GOT",
"departureDate":"2016-06-23",
"departureTime":"20:58"
},
"c2c86e54-b4d0-4d83-934b-775a86f0a16c":{
"airport":"Gothenburg, Sweden - Landvetter (GOT)",
"arrivalDate":"2016-06-21",
"arrivalTime":"20:50",
"code":"GOT",
"departureDate":"2016-06-23",
"departureTime":"20:50"
}
},
"users":{
"1ddf3c02-1f2e-4eb7-93d8-3d8d4f9e3da2":{
"age":"25",
"createdTime":"1466533088358",
"email":"test2@test.com",
"provider":"password",
"sex":"M",
"username":"user2"
},
"c2c86e54-b4d0-4d83-934b-775a86f0a16c":{
"age":"25",
"createdTime":"1466374588255",
"email":"test1@test.com",
"provider":"password",
"sex":"M",
"username":"user1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
当前的Java代码将返回所有只有相同机场的子代码.正如您所猜测的那样,当需要对客户端进行排序的数据量远大于上述测试数据时,这是不可行的.我怎样才能更好地过滤firebase上的数据呢?
我在 Firebase 中使用 Javascript,我想对第二级或第三级存在的值进行查询,我的数据库是这样的:
Users :
-KNwBd5cF6iY9dWh0eFd :
name: "Jon Snow"
phones:
phone1: "0123456789"
phone2: "0123456987"
Run Code Online (Sandbox Code Playgroud)
我想对phone1值进行查询,我现在orderByChild用来查询数据库,我的代码是:
var ref = firebase.database().ref("users");
ref.orderByChild("name").equalTo("Jon Snow").on("value", function(snapshot) {
console.log(snapshot.val());
});
Run Code Online (Sandbox Code Playgroud)
但是我只能用它来查询第一级值的值,但如何在第二级或第三级进行另一个查询。