【问题标题】:Can we use Firebase update function for updating priority as well我们可以使用 Firebase 更新功能来更新优先级吗
【发布时间】:2013-09-04 12:27:54
【问题描述】:

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

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • 在数据中复制优先级的目的是什么?有什么理由不简单地对返回的数据使用 getPriority() 吗?在此处了解您的用例的详细信息将有助于提供简洁的答案
  • 有两个原因 - 1. Firebase forge 不显示优先级,我们想知道该值。 2. 我们在基于 c# 的中间层中使用 REST API 来拉取数据,但我们在拉取的数据中看不到优先级。
  • 您可以将“format=export”作为查询参数添加到您的 REST 调用中以导出优先级数据。不幸的是,Firebase 中还没有 updateWithPriority 函数。
  • @Kato,说您需要将时间戳设置为优先级,以便您可以查询两个日期之间的结果。

标签: firebase


【解决方案1】:

我知道我在这里的答案已经很晚了,但我现在只是遇到了类似的需求,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 键与 .priority 键结合使用这样做。

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

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);

【讨论】:

  • new Date() 是否获取客户端计算机时间?然后不同的用户可以有任何时间。
  • new Date() 返回一个新的Javascript Date Object,而getTime() 是一个返回"the number of milliseconds since 1970/01/01" 的方法。所以,是的,这会返回客户端计算机的时间。如果你想使用服务器时间,可以使用一个特殊的占位符来告诉 Firebase 由 Firebase 服务器自动填充当前时间戳(自 Unix 纪元以来的时间,以毫秒为单位)——请参阅Firebase.ServerValue.TIMESTAMP
猜你喜欢
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2017-11-18
  • 2021-12-20
  • 1970-01-01
  • 2018-05-12
相关资源
最近更新 更多