0
votes

Interroger une carte contenant un identifiant enregistré dans Cloud Firestore avec Dart / Flutter

Comment obtenir une carte stockée dans Cloud Firestore avec Dart / Flutter? J'ai essayé cela mais cela ne fonctionne qu'avec Array:

Firestore.instance
            .collection('posts')
            .orderBy('createdAt', descending: true)
            .where("userlist", arrayContains: userId)
            .snapshots(),

voici la carte stockée dans firebase

entrez la description de l'image ici


0 commentaires

3 Réponses :


4
votes

Cela n'a pas vraiment de sens que la userlist d'utilisateurs soit un tableau ici. Firestore ne vous permet pas d'interroger les valeurs des cartes dans un tableau. Enregistrez-le simplement sous forme de carte. Si la userlist n'était qu'une carte de paires uid / valeur, vous pouvez l'interroger comme ceci en utilisant la notation par points:

Firestore.instance
        .collection('posts')
        .orderBy('createdAt', descending: true)
        .where('userlist.' + userId, isEqualTo: true)
        .snapshots(),


2 commentaires

Merci ! En fait, c'était une carte stockée dans une liste. Cela a résolu le problème côté firebase. Cependant, avec ce code côté flutter, j'obtiens l'instantané mais il est vide. J'ai exactement la même syntaxe que vous et userId est la même que la première valeur de clé. Avez-vous une idée pourquoi?


Si vous avez une nouvelle situation avec un problème différent, vous devriez le publier comme une nouvelle question.



1
votes

En ajoutant simplement à la réponse de Doug Stevenson, j'ai dû utiliser la clé isGreaterThan: '' afin de ne pas obtenir un tableau vide.

Firestore.instance
    .collection('posts')
    .where('userlist.' + userId, isGreaterThan: '')
    .snapshots(),


0 commentaires

0
votes

Je ne recommande pas votre manière de modèle de données. En raison de certaines limitations comme ci-dessous:

  1. Vous ne pouvez avoir que 20000 champs dans un document Firestore (y compris les champs de tableau).
  2. Vous ne pouvez pas attribuer de règles de sécurité à chaque champ. Les règles de sécurité sont une chose à laquelle vous devez penser.
  3. Vous ne pouvez pas les interroger.

Donc, mieux je vous recommanderais d'utiliser des documents pour chaque utilisateur.


0 commentaires