#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!