# #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 если мы используем метод, содержащий массив, для моментального снимка, то как мы это используем ?