5

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

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

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

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

我该如何解决这个问题?

4

1 回答 1

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),而不是正在更新的单个子级的优先级(即property1和的优先级property2)。如果您想为正在更新的子节点包含优先级,并且子节点是叶节点(即字符串、数字、布尔值),那么您可以将特殊命名.value的键与键结合使用.priority来执行此操作。

以下示例显示如何更新发生更新的根位置 (ie path/to/child) 以及正在更新的子节点 (ieproperty1property2) 的优先级。显然,如果您不想全部更新,您可以选择性地选择要更新的优先级。

var fb = new Firebase("http://a_firebase.firebaseio.com");
var ref = fb.child("/path/to/child");
var newPriority = (new Date()).getTime(); //timestamp, as you mentioned
var data = { 
    "property1": {".value": "updated_val", ".priority": newPriority},
    "property2": {".value": "updated_val2", ".priority": newPriority},
    ".priority": newPriority
}
ref.update(data);
于 2015-10-26T19:59:17.663 回答