В моем приложении у меня есть три коллекции:
db_contacts
Firestore-root
|
--- db_contacts (collection)
|
--- phoneNumber (document)
|
--- 'phone': phoneNumber
db_contacts содержит список мобильных телефонов, которые я добавляюперед головой.Коллекция будет содержать около 1 миллиона номеров телефонов позже.В настоящее время он содержит только 50000 phoneNumber (50000 документов).
users_contacts
Firestore-root
|
--- users_contacts (collection)
|
--- uid (document)
|
--- contacts (subcollection)
|
--- phoneNumberOfContact (document)
|
--- 'phone': phoneNumberOfContact
users_contacts содержит все номера телефонов каждого пользователя намое приложение.Приложение будет использоваться около 10000 пользователей, каждый из которых имеет ~ 500 контактов.Так что у меня будет 10 000 документов uid, и у каждого будет ~ 500 phoneNumberOfContact документ внутри подколлекции контактов.
users_common_contacts
Firestore-root
|
--- users_common_contacts (collection)
|
--- uid (document)
|
--- contacts (subcollection)
|
--- phoneNumberOfContact (document)
|
--- 'phone': phoneNumberOfContact
users_common_contacts содержитконтакты пользователя уже есть в db_contacts .Я заполняю эту коллекцию обработчиком событий, установленным в users_contacts onWrite.
Мой вариант использования
Мне нужно создать дополнительную коллекцию, в которой хранятся уникальные контакты пользователя, находящиеся внутри.пользователи_коммон_контакты.Какие контакты только у этого пользователя имеют общее с db_contacts и что нет у других пользователей.
То, что я сделал до сих пор и оказалось ошибкой, заключается в следующем:
users_unique_contacts
Firestore-root
|
--- users_unique_contacts (collection)
|
--- uid (document)
|
--- contacts (subcollection)
|
--- phoneNumberOfContact (document)
|
--- 'phone': phoneNumberOfContact
Моя проблема
Я не мог правильно заполнить эту таблицу, поскольку нет способа найти уникальные контакты одного пользователя.Мой код для заполнения users_unique_contacts выглядит следующим образом:
exports.userCommonContactsListener =
functions.firestore.document('users_common_contacts/{userID}/contacts/{documentID}')
.onCreate((snap, context) => {
const DocumentID = context.params.documentID;
const UserID = context.params.userID;
const uniqueContactsRef = admin.firestore().collection('users_unique_contacts').doc(UserID).collection("contacts");
return new Promise((resolve, reject) => {
uniqueContactsRef.where('phone', '==', DocumentID).get().then(contactSnapshot => {
if (contactSnapshot.size > 0) {
console.log(`Found Common Number in Unique ${contactSnapshot}`);
contactSnapshot.forEach(documentSnapshot => {
documentSnapshot.ref.delete();
console.log(`Deleted ${documentSnapshot.ref.id} as unique contact`);
resolve(`Deleted ${documentSnapshot.ref.id} as unique contact`);
});
} else {
var db_contacts = {}
db_contacts['phone'] = DocumentID;
db_contacts['timestamp'] = new Date();
uniqueContactsRef.doc(DocumentID).set(db_contacts, { merge: true }).then((res) => {
console.log(`Added ${DocumentID} as unique contact`);
resolve(`Added ${DocumentID} as unique contact`);
}).catch((err) => {
console.log(err);
reject("Error Removing Unique Contact", err);
});;
}
});
});
});
Код не работает, uniqueContactsRef.where('phone', '==', DocumentID).get()
никогда не возвращает никаких значений.
Как мне перейтив моделировании мои users_unique_contacts ?
Обновление:
Дальнейшее объяснение
Что я подразумеваю под: "Мне нужно создать дополнительную коллекцию, в котором хранятся уникальные контакты пользователя, которые находятся внутри users_common_contacts. Какие контакты только этот пользователь имеет общего с db_contacts и что ни один другой пользователь не имеет. "
Допустим, db_contacts имеют следующие номера:
- 111111
- 222222
- 333333
- 444444
- 555555
- 123456
Пользователь A имеет общие с db_contacts следующие номера:
- 111111
- 222222
- 555555
- 444444
- 123456
Пользователь B имеет общее с db_contacts следующимнизкие цифры:
- 111111
- 222222
- 333333
- 555555
Сейчас Пользователь A - это единственное число, которое объединяет следующие цифры:
Теперь Пользователь B являетсяединственное, что объединяет следующие цифры:
Итак Пользователь A имеет следующие уникальные номера:
Итак Уникальные номера пользователя B :