Как мне найти значение из значения коллекции массива, сравнив идентификатор в firebase на моментальном снимке в React-native?

# #firebase #react-native #google-cloud-firestore

Вопрос:

У меня есть коллекция под названием «Врачи». Мне нужно найти только те данные из коллекции, в которой есть текущий пользователь внутри всех участников

экс:

врачи.Все участники.Идентификатор пользователя == Идентификатор пользователя

Как вы можете видеть, в allParticipants есть массив данных

есть ли какой-либо способ найти эти данные, используя условие where или что-либо еще, пожалуйста, помогите мне разобраться в этом

введите описание изображения здесь

Ответ №1:

Вы можете использовать array-contains оператор, однако для этого вам нужно знать полный пользовательский объект, поскольку это массив объектов, а не строки. Например,

 const userObj = {
  channel: "/channels/channelId",
  user: "/users/userId",
  userID: "userId"
}

const colRef = firebase.firestore().collection("channels")
colRef.where("allParticipants", "array-contains", userObj).get().then(snap => {
  console.log(`${snap.size} documents found`)
})
 

Если бы вы могли хранить массив только идентификатора пользователя (строки), то запрос был бы таким же простым, как:

 const {uid} = firebase.auth().currentUsers.uid
const query = colRef.where("participantUIDs", "array-contains", uid)
 

Но если вам нужно сохранить этот массив объектов, то сначала вам нужно будет получить идентификатор канала этого пользователя и следовать методу 1.

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

1. @ Dharmaraj у меня есть только идентификатор пользователя, тогда как мы можем его найти ?

2. @SarthakDhami, тогда вы можете использовать 2-й метод, но вам придется хранить отдельный массив строк, т. Е. Только идентификаторы пользователей… ["uid1", "uid2"] вы можете добавить для этого отдельное поле, как в моем ответе — «Участники».

3. @ Dharmaraj Спасибо, что массив содержит то, что я знаю, но я хочу найти в объекте массива, поэтому, пожалуйста, если у вас есть какие-либо идеи об этом, дайте мне знать.

4. @SarthakDhami сначала вам нужно будет получить идентификатор канала пользователя, а затем сформировать этот идентификатор пользователя, как в ответе. Другого пути нет.

5. @ Dharmaraj если мы используем метод, содержащий массив, для моментального снимка, то как мы это используем ?