2017-10-27 8 views
0

私は、To-doアプリケーションを構築してFirebaseについて学んでいます。特定のリストにアイテムを追加するには、そのスラッグでリストを探し、そのアイテムをユーザーに提供したいと思います。現在、私は次のクエリを持っている:Firebaseの「アレイ」に子アイテムを追加するには?

database.ref('lists').orderByChild('slug').equalTo(listSlug).child('items').push({ 
    title: values.itemTitle 
}) 

これは、次のエラーを生成します。パラメータが正しい

TypeError: __WEBPACK_IMPORTED_MODULE_1__utils_firebase__.a.ref(...).equalTo(...).child is not a function 

listSlugは、することになっているものである、とvaluesがすることになっているものです同じように。指定されたスラッグでアイテムを検索してクエリを実行すると、リストを取得するときに私の仕事ができましたが、アイテムを追加する方法を見つけることができません。

EDIT: saving the world, one item at a time

+0

この配列が格納されている現在のデータベース構造の例を共有できますか? – Grimthorr

+0

@Grimthorr、そこに行きます。 – zcserei

答えて

1

の保存データをpush()を使用してデータベースにset()またはupdate()は方法です、:要求に応じ

、ここではデータベースと私は追加したいものの保存されていない例がありますReferenceインターフェイス。これは、データベースからデータを取得するためのさらなる方法も提供します。

ReferenceorderByChild()またはequalTo()メソッドを呼び出すときは、代わりにQueryが返されます。 Referenceとは異なり、Queryは、データベースからデータを取得するためにのみ使用できます。

データをデータベースにプッシュするには、まずデータベース内のアレイノードの正確な位置を知り、database.ref(...).child(...)を使用してReferenceを作成する必要があります。

配列が/lists/listId1/itemsに配置されている場合たとえば、あなたが使用する必要があるだろう:

database.ref('lists').child('listId1').child('items').push({ 
    title: values.itemTitle 
}) 

それとも、単に:

database.ref('lists/listId1/items').push({ 
    title: values.itemTitle 
}) 

あなたがの場所がわからない場合データベースを検索する必要があります。または、クエリを使用して以前にデータを読み込んだ場合は、DataSnapshot#ref(またはキーにはDataSnapshot#key)を使用して結果からReferenceを取得することができます。これにより、プッシュする前に場所を再度照会する必要がなくなります。

+0

だから別にIDを調べる必要がありますか?スラッグに基づいてデータベースを照会し、IDを取得してアイテムにプッシュしますか? – zcserei

+1

@zcsereiこれは間違いなく、あなたがIDを知らないのであれば、それを見つけるためにまずデータベースに問い合わせる必要があります。以前にクエリを使用してデータを読み込んだ場合は、['DataSnapshot#key'](https://firebase.google.com/docs/reference/js/firebase.database)を使用して結果からキーを取得できます。 DataSnapshot#key)を作成し、後で使用するためにこれを変数に格納します。したがって、レコードを追加する前にキーを再度照会する必要はありません。私はこれを私の答えに加えます。 – Grimthorr

+0

ありがとうございます、私はあなたの答えに基づいて解決策を持って、参照とクエリオブジェクトの違いをクリアすることは多くの助けになりました。 – zcserei

関連する問題