как обновить узлы внутри других узлов в firebase - PullRequest
0 голосов
/ 15 апреля 2020

Контекст Здравствуйте, я пытаюсь обновить элемент узла в firebase с помощью android, проблема в том, что, как видно из структуры моей базы данных, Database У меня есть узел, называемый «комментарий», и внутри него есть другой узел с идентификатором поста, а внутри узла идентификатора поста - идентификатор комментария.

выпуск

Я не знаю, как я могу обновить все узлы, которые соответствуют определенным кодировкам, поскольку я не могу указать точный путь, так как это приведет к обновлению только одного узла, и я хочу обновить все узлы, которые соответствуют условие запроса, как видно из кода.

final DatabaseReference CommentDB = FirebaseDatabase.getInstance().getReference("Comment");
Query quersy = CommentDB.orderByChild("uname").equalTo(currentUsers.getDisplayName());
quersy.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()){
            String key = ds.getKey();
            HashMap<String, Object> maps = new HashMap<>();
            maps.put("uimg", ""+mUri);
            sd.child(key).updateChildren(maps);

1 Ответ

0 голосов
/ 15 апреля 2020

Ваш uname вложен в два динамических c уровня. База данных Firebase Realtime может упорядочивать / фильтровать только те значения, которые находятся на фиксированном пути ниже одного уровня Dynami c

Таким образом, вам придется либо изменить структуру данных на плоский список в /Comment, либо прочитать все данные в /Comment и отфильтровать на стороне клиента.

final DatabaseReference commentDB = FirebaseDatabase.getInstance().getReference("Comment");
commentDB.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot level1Snapshot : dataSnapshot.getChildren()){
            for(DataSnapshot level2Snapshot : level1Snapshot.getChildren()){
                if (currentUsers.getDisplayName().equals(level2Snapshot.child("uname").getValue(String.class)) {
                    Log.i("Firebase", "Updating "+level1Snapshot.getKey()+"/"+level2Snapshot.getKey());
                    level2Snapshot.getRef().child("uimg").setValue(mUri);
                }    
            }    
        }
    }
    ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...