2017-12-13 10 views
3

Firestore文書のフィールドを更新/削除しようとしていますが、名前に「ピリオド」が含まれているフィールドは、それらを更新/削除する。期間がある理由は、オブジェクトのキーとしてURLを使用しているため、これは半一般的な使用例だと思います。名前に "period"という名前のFirestoreフィールドを更新/削除できません。

例:

まず文書を作成します(これは正常に動作します)

db.collection("data").doc("temp").set({ 
    helloworld: { 
     key1: 'foo' 
    }, 
    hello.world: { 
     key1: 'bar' 
    } 
}) 

あなたが期間なしの要素を削除しようとすると、それが正常に動作します。

db.collection("data").doc("temp").update({ 
    helloworld: firebase.firestore.FieldValue.delete() 
}) 
// Value is Deleted 

ピリオドのない要素を削除しようとすると、何もしません。私も

let u = {} 
u['hello.world'] = firebase.firestore.FieldValue.delete() 
db.collection("data").doc("temp").update(u) 
// Nothing Happens! 

を試してみた

db.collection("data").doc("temp").update({ 
    hello.world: firebase.firestore.FieldValue.delete() 
}) 
// Nothing Happens! 

は、これはバグですか?フィールド名のピリオドはサポートされていますか?要素を作成することはできますが、削除はできません。

答えて

4

あなたが更新に名にピリオドを使用する場合、引用符でそれを包むかのように削除する必要があります。

db.collection("data").doc("temp").update({ 
    "hello.world": firebase.firestore.FieldValue.delete() 
}) 

または動的な名前のために:

[`hello.${world}`]: firebase.firestore.FieldValue.delete() 
+0

興味深いことに、私はこれを試して、これが動作すれば受け入れられた答えとしてマークします。それでも "set"は引用符なしでは動作しますが、 "update"では動作しません。 –

+1

セットはオブジェクト形式のデータに作用し、更新はキー値形式のデータに作用します。 –

+0

残念ながら私のキーは動的なので、このメソッドを実行する文字列リテラルを提供することはできません。 –

3

更新操作がhello.worldを読んでいますこのようにネストされたwordというフィールドへのドット区切りパスとして指定します。

{ 
    hello: { 
    world: "Some value" 
    } 
} 
あなたはアップデートで、文字通り、それを参照するために FieldPathを使用する必要が名にドットを持つフィールドがある場合

は: https://firebase.google.com/docs/reference/js/firebase.firestore.FieldPath

をだから、これはあなたが望むものである:

doc.update(
    firebase.firestore.FieldPath("hello.world"), 
    firebase.firestore.FieldValue.delete()); 
+0

エラーが発生しました:機能DocumentReference.update()は1つの引数を必要としますが、2つの引数で呼び出されました。 –

+0

@SandeepDineshあなたはウェブクライアントを使用していますか? https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentReference#updateの場合はそうではありません。 –

0

私は回避策を見つけましたあなたがダイナミックキーを使用していて、J Livengoodのソリューションがうまく動作しない場合"merge:true"を指定して "set"メソッドを使用すると、削除値でキーを選択的に設定できます。

関連する問題