2017-12-17 3 views
1

Ich möchte Werte zu Array im Firestore-Dokument hinzufügen und sie als Liste oder Array zurück erhalten.Ich muss einem Array-Feld in einem Cloud-Firestore-Dokument einen Wert hinzufügen

Dies ist mein Code, und es ersetzt nur den Array-Wert um 0 Index, und ich machte eine Liste und fügte den Wert es zurück boolean.

FirebaseFirestore db = FirebaseFirestore.getInstance(); 
final DocumentReference doc = db.collection("RoomInformation").document(model.getRoomAdmin()); 

db.collection("RoomInformation").document(model.getRoomAdmin()).update(freshUser).addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 
     if (task.isSuccessful()) { 
      doc.update("onlineUsers" , Arrays.asList("user" , facebookUserName)).addOnSuccessListener(new OnSuccessListener<Void>() { 
       @Override 
       public void onSuccess(Void aVoid) { 
        new OurToast().myToast(view.getContext() , facebookUserName + " Join The Room"); 
       } 
      }); 
     } 
    } 
+0

ich machte es mit Arrays.asList() und ich habe es mit collections.singltonlist() und wenn ein anderer den Raum kommen, es zu ändern, ich hinzufügen möchte, um den neuen Benutzer unter dem alten Benutzer – alserdar

Antwort

0

Wie in der offiziellen Dokumentation zu arrays gesehen:

Obwohl Cloud-Firestore-Arrays speichern kann

, spielt es keine Array-Mitglieder oder Aktualisieren von einzelnen Array-Elementen unterstützen abfragt.

Unter dem folgenden Code-Schnipsel als Beispiel:

public class ArrayPost { 
    String title; 
    String[] categories; 

    public ArrayPost(String title, String[] categories) { 
     this.title = title; 
     this.categories = categories; 
    } 
} 

ArrayPost myArrayPost = new ArrayPost("My great post", new String[]{ 
    "technology", "opinion", "cats" 
}); 

Wir sehen, dass die Datenstruktur oben verwendet, gibt es keine Möglichkeit, diese Abfrage auszuführen.

Noch eine Anmerkung, obwohl Cloud Firestore Arrays speichern kann, ist dies ein Anti-Pattern. Einer der vielen Gründe, die Firebase gegen die Verwendung von Arrays empfiehlt, ist, dass die Sicherheitsregeln nicht geschrieben werden können. Ich empfehle Ihnen, eine alternative Datenstruktur zu betrachten, bei der jede Kategorie der Schlüssel in einer Karte ist und alle Werte true sind. Bitte werfen Sie einen Blick auf dieses Beispiel:

public class MapPost { 
    String title; 
    Map<String,Boolean> categories; 

    public MapPost(String title, Map<String,Boolean> categories) { 
     this.title = title; 
     this.categories = categories; 
    } 
} 

Map<String, Boolean> categories = new HashMap<>(); 
categories.put("technology", true); 
categories.put("opinion", true); 
categories.put("cats", true); 
MapPost myMapPost = new MapPost("My great post", categories); 
+0

Dank Alex, ich fand eine Notiz in Firestore sagte: Abfrage in Subkollektionen wird derzeit nicht in Cloud Firestore unterstützt. Wenn Sie Daten über Sammlungen hinweg abfragen müssen, verwenden Sie Sammlungen auf Stammebene ... und ich finde keine Informationen über Collectios auf Root-Ebene. – alserdar

+0

Welches ist? Und worüber? –

+0

Ich habe meinen Kommentar editiert alex ~ – alserdar

Verwandte Themen