Я только начинаю работать с Firebase и пытаюсь определить, как лучше всего структурировать мою базу данных Firestore.
Я хочу найти все документы из коллекции «события», где «участники» (поле массива в каждом документе события, содержащем объекты с ключами «displayName» и «uid») содержит по крайней мере один соответствующий uid. Список пользователей, с которыми я сравниваю, будет друзьями пользователей.
Таким образом, выражаясь более семантически, я хочу найти все события, в которых хотя бы один из участников этого события является «другом», используя uid участников события и друзей пользователей.
Надеюсь, я не потерял тебя. Может этот скриншот поможет.
Вот как я разработал коллекцию «событий» прямо сейчас
Можно ли сделать такой глубокий запрос с помощью Firestore? Или мне нужно будет выполнить фильтрацию на стороне клиента?
РЕДАКТИРОВАТЬ - добавлен код
// TODO: filter events to only those containing friends
// first get current users friend list
firebase.firestore().doc(`users/${this.props.currentUser.uid}`)
.get()
.then(doc => {
return doc.data().friends
})
.then(friends => { // 'friends' is array of uid's here
// query events from firestore where participants contains first friend
// note: I plan on changing this design so that it checks participants array for ALL friends rather than just first index.
// but this is just a test to get it working...
firebase.firestore().collection("events").where("participants", "array-contains", friends[0])
.get()
.then(events => {
// this is giving me ALL events rather than
// filtering by friend uid which is what I'd expect
console.log(events)
// update state with updateEvents()
//this.props.dispatch(updateEvents(events))
})
})
Я использую React-Native-Firebase
"react-native": "^0.55.0",
"react-native-firebase": "^4.3.8",
participants
в качестве коллекции к документуevent
, тогда как каждый документ в коллекцииparticipants
будет иметь идентификатор какuid
. Затем вы можете запросить коллекцию событий на предмет соответствияuid
в коллекцииparticipants
внутри документаevent
. Вы можете избежать массиваparticipants
внутри документаevent
. - person Neelavar   schedule 18.09.2018