2016-01-20 3 views
3

Я пытаюсь обновить firebase все дети на одном уровне дерева. Например, примерно так:Как обновить всех детей в Firebase?

firebase.child("auctions").child().update({a: true}); 

, и это вернет мне ошибку, потому что ребенок пуст. Есть ли способ обновить всех детей на аукционах?

+0

для понятного понимания, у меня есть эта структура 'аукционы-> item1'-> a-> true' и item у меня есть несколько. Есть ли способ сделать изменения для всех 'a'? Спасибо –

ответ

2

Вам не нужно, чтобы этот пустой вызов .child().

firebase.child("auctions").update({a: true}); будет делать это изменение /auctions/a/whatever до /auctions/a/true.

Если вы действительно хотите «обновить все дочерние элементы на одном уровне дерева», то .set может работать лучше, поскольку он заменит все данные в конечной точке объектом, который вы ему даете. Так что, если вы запускали firebase.child("auctions").set({a: true}); тогда все под /auctions будет заменен {a: true}

Если вы не хотите, чтобы шумите все под /auctions, но вместо того, чтобы вы хотели шумите все под auctions/a вы могли бы сделать firebase.child("auctions/a").set(true);

Существует несколько способов выполнить то, что вам нужно. Я просто не уверен на 100%, что вам действительно нужно.

+2

Я написал, возможно, не абсолютную четкую структуру firebase. У меня есть эта структура: 'аукционы> item1> a = 5', и я хотел бы установить все {{a}} на 0 (например). Есть ли способ, как я могу написать примерно следующее: 'firebase.child (« аукционы »). Child (« * »). Update ({a: 0});' Thank's –

1

В какой-то момент вам нужно будет перевернуть все дети. Вот один простой способ сделать это:

firebase.child("auctions").on('value', function(snapshot) { 
    snapshot.ref().update({a: true}); // or snapshot.ref if you're in SDK 3.0 or higher 
}); 

В качестве альтернативы вы можете сначала собрать все обновления, а затем отправить их в Firebase как один (потенциально большой) обновление заявление:

var updates = {}; 
firebase.child("auctions").on('value', function(snapshot) { 
    updates["auctions/"+snapshot.key+"/a"] = true; 
}); 
snapshot.ref().update(updates); // or snapshot.ref if you're in SDK 3.0 or higher 

Оба сниппеты сделать то же самое, но последний отправляет одну команду, поэтому более устойчив в случае сбоя сети.

+0

Привет, это я пытаюсь, но stil это плохой уровень JSON. Я сохраняю оригинальный JSON, прежде чем использовать его для http://tmp2.aikidohostivar.cz/example/auctions-orig.json, а после использования - статуя типа: http://tmp2.aikidohostivar.cz/example/auctions-after-req.json Как вы можете видеть, я пытаюсь изменить глобальный атрибут «имя» и находится на плохом уровне: ( –

+0

в Firebase V3 .ref больше не является функцией - просто удалите() из первого примера –

Смежные вопросы