Как мне поместить дочерний элемент внутрь родительского дочернего элемента в Firebase?

#javascript #firebase #firebase-realtime-database

#javascript #firebase #firebase-realtime-database

Вопрос:

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

В принципе, я хотел, чтобы это было похоже —

введите описание изображения здесь

Но мой результат выглядит как —

введите описание изображения здесь

Мой JavaScript

 <script>

    var database = firebase.database();

    var userRef = database.ref('/user');
    var projectRef = database.ref('/user/project');
    var taskRef = database.ref('/user/project/task');

    var userDisplay = userRef.push({
        username: 'userA',
        firstname: 'John',
        lastname: 'Smith'
        });

    var projectDisplay = projectRef.push({
        projectname: 'Project Test 1',
        projectdate: '12th December 2019'
        });

    var taskDisplay = taskRef.push({
        taskname: 'Task 1',
        taskdate: '12th December 2019',
        taskdetail: 'Task Testing'
    });

    console.log("Running...");

    document.getElementById('test').innerHTML= userDisplay   ' '   projectDisplay   ' '   taskDisplay;  

</script>
  

Комментарии:

1. вас устраивает, как данные имя, фамилия, имя пользователя, дата проекта, название проекта, название задачи, сведения о задаче, название задачи в настоящее время сохраняются в вашей базе данных??

2. Да, они сохраняются в моей базе данных

3. Вы знаете, как ввести их в идентификатор?

4. На самом деле я сомневаюсь, что структура первого изображения и способ хранения ваших данных в настоящее время с вашим кодом на втором изображении — это именно то, что вы ищете. Как еще вы хотели бы это изменить?? ссылка на изображение

5. Я пытался сделать что-то вроде того, что задача test 1 принадлежит project test 1, так что, если создается другой проект с именем project test 2, эта задача test 1 не появится внутри project test 2, если вы понимаете, что я имею в виду?

Ответ №1:

Одним из решений является использование update() метода следующим образом:

   var newUserKey = firebase
    .database()
    .ref()
    .child('user')
    .push().key;

  var newProjectKey = firebase
    .database()
    .ref()
    .child('user/'   newUserKey)
    .push().key;

  var newTaskKey = firebase
    .database()
    .ref()
    .child('user/'   newUserKey   '/'   newProjectKey)
    .push().key;

  var updates = {};

  updates['/user/'   newUserKey] = {
    username: 'userA',
    firstname: 'John',
    lastname: 'Smith'
  };

  var project = {};
  project[newProjectKey] = {
    projectname: 'Project Test 1',
    projectdate: '12th December 2019'
  };
  updates['/user/'   newUserKey]['project'] = project;

  var task = {};
  task[newTaskKey] = {
    taskname: 'Task 1',
    taskdate: '12th December 2019',
    taskdetail: 'Task Testing'
  };

  updates['/user/'   newUserKey]['project'][newProjectKey]['task'] = task;

  firebase
    .database()
    .ref()
    .update(updates);
  

Комментарии:

1. Ошибка: ошибка без перехвата: ошибка Reference.update не удалась: Первый аргумент содержит путь /user/-L_tgdK8qq3ycpG7RsEL, который является предком другого пути /user/-L_tgdK8qq3ycpG7RsEL/-L_tgdK8qq3ycpG7RsEJ

2. Он допустил опечатку, изменив newPostKey на newUserKey

3. @Thomas Вы правы, мое первоначальное решение выдает ошибку (которая связана не с опечаткой, обнаруженной Fire-In-D-Hole), а с тем фактом, что update() метод не принимает путь, который является предком другого пути. Я полностью переработал предложенное решение и протестировал его.

4. Спасибо за вашу помощь @RenaudTarnec Я новичок в firebase, поэтому я просто развиваю понимание вложенности данных и т.д. как структурированный

5. @ThomasJH Рад, что я смог помочь. Здесь следует отметить один ключевой момент — использование обозначения в квадратных скобках, см. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /… . Счастливого развития Firebase!