Firebase数据库:如何更改列表项的值?

时间:2019-05-06 14:09:54

标签: firebase firebase-realtime-database flutter

我的数据库中有这样的结构:

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

我想在第二项中添加答案,但是我没有ID。 我正在尝试获取物品,并且它会返回

  

[null,{answer:一些答案,一个问题:一个问题},{问题:另一个问题}]

但是如果没有answer字段,我将无法获得所需的物品,而且我也无法获得其ID。

我尝试使用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}');
});

第一次尝试返回的输出与我上面写的相同,第二次返回null

那么,有人知道如何向第二个问题中添加answer字段吗?

P.S。我使用Flutter,但我认为这对这个问题没有多大意义。

1 个答案:

答案 0 :(得分:0)

因此,基本上,您试图在第二个项目中添加“答案”。 我会以这种方式做到这一点: 首先是事先知道密钥,以便我可以在第二项中插入一个子节点。这样,我可以写类似: myDBReference.child(“ items”)。child(“ key_known_beforehand”)。child(“ answer”)。setValue(“ this is ansewr”);

或者如果我不知道密钥,这似乎是这里的问题: 我会使用Firebase查询。就像是.. myDBReference.child(“ items”)。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

要过滤数据,可以在构造查询时将任何limit方法或range方法与order-by方法结合使用。

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.