Flutter firestore, как получить документы, содержащие значение внутри массива

#flutter #google-cloud-firestore

#flutter #google-облако-firestore

Вопрос:

У меня есть данные json, хранящиеся в firestore, как показано ниже, идентификатор документа — это дата в формате ddmmyyyy

 29032019:{
   morning:[{
      person : 1,
      name:'abc',
      cancelled:false
     },
     {
      person : 2,
      name:'abc',
      cancelled:false
    }
  ],
  afternoon:[{
      person : 3,
      name:'abc',
      cancelled:false
   },
   {
      person : 4,
      name:'abc',
      cancelled:false
   }
 ]
}
30032019:{
   morning:[{
      person : 5,
      name:'abc',
      cancelled:false
     },
     {
      person : 2,
      name:'abc',
      cancelled:false
    }
  ],
  afternoon:[{
      person : 6,
      name:'abc',
      cancelled:false
   },
   {
      person : 7,
      name:'abc',
      cancelled:false
   }
 ]
}
  

здесь 9032019 и 30032019 являются идентификаторами документа. Как я могу получить документы, которые содержат человека внутри массивов morning и afternoon, пока я мог бы сделать, это извлечь документы, используя следующие 3 предстоящие даты, и выполнить итерацию по массивам morning и afternoon, чтобы проверить, существует человек с идентификатором 6 в коллекции или нет.

Комментарии:

1. вы можете добавить код, который вы используете

Ответ №1:

С Firestore вы не можете искать поля объектов внутри массивов, как сейчас. Вы можете выполнять поиск в массивах только по точному содержимому их элементов.

Это означает, что вам нужно будет перенести значения для поиска в новое поле, доступное для поиска. Если вы выполняете поиск по person полю, вы могли бы создать новое поле массива в вызываемом документе, people которое содержит только целые числа каждого пользователя, а затем использовать запрос arrayContains, чтобы найти их.