我们是否可以使用Firebase更新功能来更新优先级

时间:2013-09-04 12:27:55

标签: firebase

我正在使用update方法更新firebase中我的对象的一些属性。作为更新调用的一部分,我还可以更新对象的优先级吗?

我有一个存储在firebase中的对象集合。我正在使用Javascript sdk与我的数据进行交互。每当我更新对象的任何属性时,我都将对象的优先级设置为Firebase.ServerValue.TIMESTAMP常量。

现在,我想开始将每个对象的优先级存储在对象上定义的名为UpdatedOnTimestampTs的属性中。每当我更新任何属性时,我也会使用TIMESTAMP常量更新UpdatedOnTimestampTs。

现在的问题是,我无法找到一种方法来调用更新函数以及优先级(没有像setWithPriority这样的updateWithPriority)。因此,如果我使用TIMESTAMP常量在两个不同的操作中更新UpdatedOnTimestampTs和优先级,我可能(或将)会得到不同的值。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

我知道我在这里的答案迟到了,但我现在只是遇到类似事情的需要而且updateWithPriority不存在(也不是一种容易的方法)查看/编辑Forge中的优先级。

您可以在更新中加入特别命名的密钥.priority,它应该达到预期的效果。

.priority密钥记录在Firebase REST API中,但可以在其他库中使用。

因此,在Javascript中,如果您只想更新优先级(其中有setPriority),以下内容将起作用:

var fb = new Firebase("http://a_firebase.firebaseio.com");
var ref = fb.child("/path/to/child");
var data = { ".priority": (new Date()).getTime() } //timestamp, as you mentioned
ref.update(data);

如果您想在更新其他属性时更改优先级,这就是您所要求的,只需将其包含在您要更新的数据中:

var fb = new Firebase("http://a_firebase.firebaseio.com");
var ref = fb.child("/path/to/child");
var data = { 
    "property1": "updated_val",
    "property2": "updated_val2",
    ".priority": (new Date()).getTime(), //timestamp, as you mentioned
}
ref.update(data);

编辑:要明确,这将更新子参考位置的优先级(即/path/to/child),而不是个别孩子的优先级正在更新的内容(即property1property2的优先级)。如果要为正在更新的子节点包含优先级,并且子节点是叶节点(即字符串,数字,布尔值),则可以将特殊命名的.value键与{{{ 1}}这样做的关键。

以下示例显示如何更新正在进行更新的根位置的优先级(即.priority)以及正在更新的两个子节点(即path/to/child和{ {1}})。显然,如果您不想更新所有优先级,您可以有选择地选择要更新的优先级。

property1