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());
});
如何获取 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());
});