База данных Firebase: как изменить значение элемента списка? - PullRequest
1 голос
/ 06 мая 2019

В моей базе данных есть такая структура:

User 1
  +- items
       +- 1
       |  |- question: some question
       |  |- answer: some answer
       |
       +- 2
          |- question: another question

Я хочу добавить ответ ко второму пункту, но у меня нет идентификатора.Я пытаюсь получить предметы, и он возвращает

[null, {answer: некоторый ответ, вопрос: некоторый вопрос}, {question: другой вопрос}]

Но я не могу получить необходимый предмет без поля answer и не могу получить их идентификаторы.

Я пытался использовать equalTo, но это не помогло.

// attempt 1
Query child = _databaseReference.child(item._user).child(db_items).equalTo(null, key: db_answer);
child.reference().once().then((DataSnapshot snapshot) {
  print('snapshot: ${snapshot.value}');
});

// attempt 2
Query child = _databaseReference.child(item._user).child(db_items).equalTo(null, key: db_answer);
child.reference().child(db_question).once().then((DataSnapshot snapshot) {
  print('snapshot: ${snapshot.value}');
});

Первая попытка возвращает тот же вывод, что я написал выше, вторая возвращает ноль

Итак, кто-нибудь знает, как я могу добавить поле answer ко второму вопросу?

PS Я использую Flutter,но я не думаю, что это много значит для этого вопроса.

1 Ответ

0 голосов
/ 07 мая 2019

Итак, в основном вы пытаетесь добавить «ответ» к вашему второму пункту. Я бы сделал это так: Во-первых, нужно заранее знать ключ, чтобы я мог вставить дочерний узел во второй элемент. Таким образом, я могу написать что-то вроде: myDBReference.child ("items"). child ("key_known_beforehand"). child ("answer"). setValue ("this the ansewr");

Или в случае, если я не знал ключ, который, кажется, проблема здесь: Я бы использовал Firebase Query. Что-то вроде.. myDBReference.child ( "элементы"). orderByValue (). startAt (starting_point_of_child_item) .endAt (ending_point_of_child_item) .child Этот запрос дал бы мне требуемый узел, и я бы установил значение там.

"

Using startAt(), endAt(), and equalTo() allows you to choose arbitrary starting and ending points for your queries

Чтобы отфильтровать данные, вы можете объединить любой из методов ограничения или диапазона с методом упорядочения при построении запроса.

Unlike the order-by methods, you can combine multiple limit or range functions. For example, you can combine the startAt() and endAt() methods to limit the results to a specified range of values.

"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...