我正在构建一个应用程序,我需要小批量处理5k +任务。为此,我有一个存储在Firebase中的任务队列。我希望能够以空状态提取一定数量的任务,更新状态并回写。
目前我看不到如何在某个字段为空的情况下提取数据。可能吗?如果没有,那么替代解决方案是什么?
更新02/12 。这是我的数据结构:
{
"-KAMnc89C5Yi_ef18ewc" : {
"0": {
"url": "https://excample.com/url",
"status": "done"
},
"1": {
"url": "https://excample.com/url1"
},
"2": {
"url": "https://excample.com/ur2"
},
"3": {
"url": "https://excample.com/ur3"
}
}
这是我正在使用的查询:
queueRef.orderByChild('status').equalTo(null).limitToFirst(1).once('value', function(snapshot) {
console.log(snapshot.val());
});
queueRef
从上面的数据中指向"-KAMnc89C5Yi_ef18ewc"
。
我希望得到一个对象 - “1”,但我得到了所有这些对象。有什么我想念的吗?
答案 0 :(得分:6)
Firebase不允许您存储没有值的属性。这仅仅意味着财产不存在。
幸运的是,这并不重要,因为这似乎有效。鉴于此数据结构:
{
"-KADbswYg3FiQF78mmUf": {
"name": "task1",
"status": "done"
},
"-KADbugr7QzTx0s93Fs0": {
"name": "task2"
},
"-KADbvKvBgiAXxnQvoBp": {
"name": "task3"
}
}
这有效:
ref.orderByChild('status').equalTo(null).once('value', function(snapshot) {
console.log(snapshot.val());
})
这会打印task2
和task3
。
答案 1 :(得分:2)
如果此快照包含任何数据,则返回true。如果不是,它将返回false。根据文件here。它比使用snapshot.val()!== null。
更有效使用这样的数据结构:
{
"girlfriend": {
"first": "Pamala",
"last": "Anderson"
}
}
这样的firebase调用:
var ref = new Firebase("https://myURL/girlfriend/Pamala");
ref.once("value", function(snapshot) {
var a = snapshot.exists();
// a === true
var b = snapshot.child("girlfriend").exists();
// b === true
var c = snapshot.child("girlfriend/first").exists();
// c === true
var d = snapshot.child("girlfriend/middle").exists();
// d === false (because there is no "name/middle" girlfriend in the data snapshot)
});