Сравните идентификатор с массивом в облачном хранилище с Angular - PullRequest
0 голосов
/ 25 апреля 2018

У меня проблемы с моим чатом в firebase, я пытаюсь выяснить, в каких чатах находится мой пользователь, для этого я хочу выполнить запрос, который находит эти идентификаторы в массиве calles Conversadores внутри моего документа, который находится внутри моей коллекции под названием mensajes .

Mensajes (collection) >> document >> conversadores (array of strings) 

Возможно ли это сделать?у меня кончились идеи,

@Injectable()
 export class ChatProvider {
 private itemDoc: AngularFirestoreCollection<Mensajes>;
 item: Observable<Mensajes[]>;

      constructor(private afs: AngularFirestore, private _lp: LoginProvider) {
           this.itemDoc = afs.collection('mensajes', ref =>
           ref.where('conversadores', '==', _lp.userId) //userId is a string (ex.'ford0013')
           .orderBy('fechaCreacion', 'desc'));

           this.item = this.itemDoc.valueChanges();
  }
 }

вот изображение моей структуры базы данных https://i.imgur.com/se8oX9I.png

Thxks

1 Ответ

0 голосов
/ 25 апреля 2018

Посмотрите на этот ответ Сэма Стерна:

Как запросить документы, которые содержат отправленный параметр в Firestore?

Он объясняет, что "лучшехранить ваши данные в виде карты логических значений ".Таким образом, вы должны структурировать поля в вашем документе как:

{
  conversadores:
    {ford0013: true, 
     ford0014: true
    },
  fechaCreation: ....
  ....
}

и запросить как

db.collection("mensajes").where("conversadores.ford0013", "==", true).get()

Теперь, если вы хотите, кроме того, упорядочить по fechaCreation, этоне будет работать, см. документ: https://firebase.google.com/docs/firestore/solutions/arrays

В документе упоминается подход к «запросам по нескольким полям», который приведет к структуре, подобной следующей, но я думаю, что это не будет работать вваш случай, когда вы хотите использовать orderBy после где.

{
  conversadores:
    {ford0013: 1502144665, 
     ford0014: 1502144665
    },
  fechaCreation: ....
  ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...