我正在使用update方法更新firebase中我的对象的一些属性。作为更新调用的一部分,我还可以更新对象的优先级吗?
我有一个存储在firebase中的对象集合。我正在使用Javascript sdk与我的数据进行交互。每当我更新对象的任何属性时,我都将对象的优先级设置为Firebase.ServerValue.TIMESTAMP常量。
现在,我想开始将每个对象的优先级存储在对象上定义的名为UpdatedOnTimestampTs的属性中。每当我更新任何属性时,我也会使用TIMESTAMP常量更新UpdatedOnTimestampTs。
现在的问题是,我无法找到一种方法来调用更新函数以及优先级(没有像setWithPriority这样的updateWithPriority)。因此,如果我使用TIMESTAMP常量在两个不同的操作中更新UpdatedOnTimestampTs和优先级,我可能(或将)会得到不同的值。
我该如何解决这个问题?
答案 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
),而不是个别孩子的优先级正在更新的内容(即property1
和property2
的优先级)。如果要为正在更新的子节点包含优先级,并且子节点是叶节点(即字符串,数字,布尔值),则可以将特殊命名的.value
键与{{{ 1}}这样做的关键。
以下示例显示如何更新正在进行更新的根位置的优先级(即.priority
)以及正在更新的两个子节点(即path/to/child
和{ {1}})。显然,如果您不想更新所有优先级,您可以有选择地选择要更新的优先级。
property1