я впервые спрашиваю здесь, но я все время использую ваш ответ, так что спасибо вам за это.
Моя проблема следующая. У меня есть схема goose mon с именем Tasks, которая выглядит примерно так:
var task = new Schema({
code: {type: String}
parent : { type: Schema.Types.ObjectId, ref: 'Task'},
childrens: [{type: Schema.Types.ObjectId, ref: 'Task'}]
})
Задачи читаются из документа Excel и содержат только информацию о «коде». При этом я должен заполнить родительский и детский поля. Примером может быть:
//Array of taks from excel
[{
{_id:1, code : '01'},
{_id:2, code: '01.01'},
{_id:3, code: '01.02'},
{_id:4, code: '01.02.01'},
}]
В конце конечный массив должен быть:
//Array of taks from excel
[{
{_id:1, code : '01', childrens:[2,3]},
{_id:2, code: '01.01', parent: 1, childrens:[]},
{_id:3, code: '01.02', parent: 1, childrens:[4]},
{_id:4, code: '01.02.01', parent: 3, childrens:[]},
}]
Это будет конечная цель. Что я делаю, это, во-первых, создаю новости. Затем я выполняю запрос на поиск, чтобы найти все задачи, выполнить al oop над ними, найти их parent и childs и сохранить их обоих (parent с информацией о потомках и child с информацией о родителях). Я делаю это с помощью следующей функции:
private async groupTasks() {
let err, tasks = await Task.find(//query);
var splitByLastDot = function (text) {
var index = text.lastIndexOf('.');
if (index !== -1) return text.slice(0, index);
else return null;
}
for (let i = 0; i < tasks.length; i++) {
let task= tasks[i];
const parentCode = splitByLastDot(tarea.codigo)
if (parentCode) {
const parent = tasks.find(x => x.code=== parentCode);
if (parent) {
task.parent = parent._id; //HERE IS THE PROBLEM
await task.save()
if (!parent.childrens.includes(task._id)) parent.childrens.push(task._id);
await parent.save()
break;
}
}
}
}
Проблема в том, что я не могу отредактировать поле шаблона из задачи. Я думаю, это потому, что mon goose find возвращает модель, которая этого не допускает. Затем я начал искать, и я думаю, что лучшим подходом было бы сделать сложный запрос на обновление, но я не знаю, с чего начать, поэтому я нахожусь.
Все, что вы видите, может быть улучшено Я был бы рад услышать.