Сохраняйте документы по одному и сохраняйте их _id в массиве Mongoose - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь сохранить некоторые документы из массива. Мне нужно сохранять их по одному и получать их идентификаторы, чтобы потом использовать их для другой транзакции. Думаю, моя проблема с потоком 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);

Какой правильный способ сделать это. Мне нужно отправить каждый разделенный документ.

Моя модель такая:

...