Firebase - 更新值为的条目

Firebase - Update entry where value is

如何获取 Firebase 唯一 ID,以便使用它来引用特定条目?

我正在使用 push 方法存储一些数据,每个条目都包含一个周数和年份。我检查 weekNumber 是否已经存在,如果存在,我需要更新 foo 和 bar。检查 weekNumber 是否存在没有问题,但我不知道如何更新其他字段。

示例数据结构:

- ENTRIES
 - USER
  -JwphpyzzHaNlh8HXA2G
   foo: 'string'
   bar: 'string'
   weekNumber: 32
   year: 2015

  -Jwphpyzzaasd2H2DHB
   foo: 'string'
   bar: 'string'
   weekNumber: 33
   year: 2015

正在检查 weekNumber 是否存在:

ref.orderByChild('weekNumber').equalTo(data.weekNumber)
   .on('value', function(result) {

   });

我用 result.key() 或 result.parent() 试过了,但是 return 路径 ENTRIES/USER 而不是唯一的 FB 键。

使用您当前的数据结构,您可以通过以下方式获取数据:

var query = ref.orderByChild('weekNumber').equalTo(data.weekNumber)
query.on('value', function(snapshot) {
    snapshot.forEach(function(weekSnapshot) {
        console.log(weekSnapshot.val());
        weekSnapshot.ref.update({ foo: 'newString' });
    });
});

但我会考虑不同的数据结构。

Firebase 的 push() 非常适合项目没有自然键的集合,类似于您将它们放入数组中的方式 JavaScript.

但在你的例子中,这些项目有一个自然键。看起来您正在尝试按年+周访问项目,这(从查看示例数据来看)似乎是一年中一周的非常独特的标识符。

在这种情况下,我会将数据存储在年+周键下:

- ENTRIES
 - USER
  "201532"
   foo: 'string'
   bar: 'string'
   weekNumber: 32
   year: 2015

  "201533"
   foo: 'string'
   bar: 'string'
   weekNumber: 33
   year: 2015

有了这样的结构,就可以直接访问特定的week/year:

ref.child('2015' + data.weekNumber).on('value', function(snapshot) {
    console.log(snapshot.val());
    snapshot.ref.update({ foo: 'newString' });
});

但您仍然可以使用以下任一方式查询年份:

// this will print all weeks of 2015
var query = ref.orderByKey().startAt('2015').endAt('201553');
query.on('child_added', function(snapshot) {
    console.log(snapshot.val());
});

甚至每年的特定一周:

// this will print week 33 of each available year
var query = ref.orderByChild('weekNumber').equalTo('33');
query.on('child_added', function(snapshot) {
    console.log(snapshot.val());
});