Я пытаюсь сохранить некоторые документы из массива. Мне нужно сохранять их по одному и получать их идентификаторы, чтобы потом использовать их для другой транзакции. Думаю, моя проблема с потоком asyn c. Потому что, когда я печатаю, массив пуст, но в базе данных все документы были вставлены.
Я использую graphql и mon goose.
const saveSubTask= async (tasks) => {
let taskIds = [];
for (const task of tasks) {
const taskModel = await getModel(task.type)
const response = await taskModel.create(task)
response.then( (doc) => {
console.dir(doc) // {_id : ObjectId("324sd33..."), description: "sdf....", ...}
inputIds.push({_id: doc._id})
})
}
return taskIds;
}
export const resolvers = {
....
Mutation: {
inputCreate: async (_, { task }) => {
const response = await saveSubTask(task.subTask);
console.dir(response) // response = []
return await {}
},
},
...
}
Когда я вызываю функцию saveSubTask, я получаю пустой массив.
Я использую getModel () для получения нужной мне модели, потому что у меня есть что-то вроде фабрики, потому что я использую разные модели для сохранения, а затем сохранения коллекции в MongoDB. Для этого я просто приведу краткое описание кода модели, чтобы сосредоточиться только на основной структуре модели.
import mongoose, { Schema } from "mongoose";
const { ObjectId } = Schema.Types;
const TaskSchemaBase = Schema({
description: String,
type: {type: String, enum: ['Event', 'Note']},
enable: Boolean,
subTaks: [
{type: Schema.Types.ObjectId, ref: 'taskBase'}
]
}, {collection: 'tasks', discriminatorKey: 'kind'} );
export const TaskBase = mongoose.model("taskBase", TaskSchemaBase);
Какой правильный способ сделать это. Мне нужно отправить каждый разделенный документ.
Моя модель такая: