Обновление Cloud Firestore - PullRequest
       2

Обновление Cloud Firestore

0 голосов
/ 24 сентября 2018

Я хочу обновить документ в облачном хранилище в соответствии со значением в документе.Что-то вроде этого.У меня есть несколько документов со случайными именами и значениями и один документ со значениями id = 1, name = patryk.А теперь я бы обновил документ с name=patryk.И я не знаю названия документа, потому что я делаю их такими, а они имеют случайное имя.

b.collection("Users")
    .add(postMapa)
    .addOnCompleteListener

Как это сделать? здесь Мне нужно название документа, но у меня его нет.

Ответы [ 4 ]

0 голосов
/ 24 сентября 2018

Предполагая, что свойство id имеет тип номера, а свойство name имеет тип String, используйте следующий код, чтобы обновить всех пользователей с id = 1 и name = patryk:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query query = rootRef.collection("Users").whereEqualTo("id", 1).whereEqualTo("name", "patryk");
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (DocumentSnapshot document : task.getResult()) {
                list.add(document.getId());
            }

            for (String id : list) {
                rootRef.collection("Users").document(id).update("name", "New Name").addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "Name Updated!");
                    }
                });
            }
        }
    }
});

Если вы используете класс модели для своего пользователя, см. Мой ответ из этой публикации .

0 голосов
/ 24 сентября 2018

Попробуйте и убедитесь, что будет только один документ для имени = patryk

  db.collection("Users").whereEqualTo("name", "patryk").addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                if (e == null) {
                    String documentId = queryDocumentSnapshots.getDocuments().get(0).getId();
                   // here you have id but make sure you have only one document for name=patryk
                }
            }
        });
0 голосов
/ 24 сентября 2018

Простой способ получить все document id по коллекциям:

firebase.collection("Users").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                list.add(document.getId());
            }
            Log.d(TAG, list.toString());
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});
0 голосов
/ 24 сентября 2018

вы можете получить документы по их имени (что на самом деле здесь не применимо):

DocumentReference docRef = db.collection("Users").document("patryk");

или вы можете запросить значения, содержащиеся в документе (которые могут ответить на ваш вопрос):

/* create a reference to the Users collection */
CollectionReference users = db.collection("Users");

/* create a query against the collection */
Query query = users.whereEqualTo("name", "patryk");

остальное - одна и та же процедура, в обоих случаях:

/* asynchronously retrieve the document */
ApiFuture<DocumentSnapshot> future = docRef.get();

/* future.get() blocks on response */
DocumentSnapshot document = future.get();

if (document.exists()) {
    System.out.println("Document data: " + document.getData());
} else {
    System.out.println("No such document!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...