Я создаю приложение для Android, которое позволяет пользователям запрашивать базу данных, вводя номер телефона. Поиск возвращается с именем пользователя, связанным с номером телефона, очень похоже на truecaller.
Вот как выглядит структура базы данных Firestore:
collection ("contact") --- документ (автоматически сгенерированный идентификатор) --- (field1 ("username"), field2 ("phoneNum"))
Это мой код:
CollectionReference collectionReference = db.collection("contact");
Query query = collectionReference.whereEqualTo("phoneNum",phonesearch);
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>(){
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task){
if (task.isSuccessful()) {
for (DocumentSnapshot document:task.getResult()){
username = document.getString("username");
phonenum = document.getString("phonenum");
//storing the searcher username in the database
Map<String, String> Usermap = new HashMap<>();
searcher = user.getDisplayName();
Usermap.put("searcher", searcher);
db.collection("contact").add(Usermap).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
}
});
Как лучше всего сохранить имена пользователей поисковиков, которые ищут номера телефонов, чтобы владельцы номеров телефонов могли получать уведомления, когда кто-то ищет их номер? Это должно выглядеть так:
collection ("contact") --- документ (автоматически сгенерированный идентификатор) --- (field1 ("имя пользователя"), field2 ("номер телефона"), field3 ("searcher1"), field4 ("searcher2") ..... fieldN ( "searcher3"))
В настоящее время создается совершенно новый документ. Я не хочу, чтобы это делалось, я просто хочу добавить новое поле (искатель) в существующий документ.
Другие решения также приветствуются. Спасибо.
............................................... . Так выглядит после изменений, вместо прежнего имени пользователя поисковика он перезаписывает предыдущее имя пользователя поискового устройства.
Map<String, Object> Usermap = new HashMap<>();
searcher = user.getDisplayName();
Usermap.put("searcher", searcher);
db.collection("contact").document(document.getId()).update(Usermap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
}
});
база данных фото1
база данных фото2
Второй скриншот может выглядеть запутанным ... это потому, что поля расположены в алфавитном порядке. Поле Searcher является типом массива, к настоящему моменту в нем должно быть около 3 имен пользователей, но оно продолжает удалять предыдущее и заменять его самым последним, поэтому в нем по-прежнему есть только один идентификатор пользователя.