Синхронный db.collection (). Aggregate () с Mongoose - PullRequest
0 голосов
/ 31 октября 2019

При инициализации моей базы данных я пытаюсь заполнить ее фиктивными данными. Для каждого пользователя в базе данных я пытаюсь заполнить поле, ссылающееся на другую коллекцию, массивом документов произвольной длины из этой коллекции.

Метод map() является синхронным, но у меняпроблемы с асинхронным методом aggregate().

users.map((user, index) => {
   db.db.collection('objects').aggregate([{ $sample: { size: Math.floor(Math.random() * 5) }}]).toArray((err, res) => {
      user.favourite_objects = [ ...res.map((object) => object._id) ];
      const newUser = new User(user);
      newUser.save();
      console.log("User", index + 1);
   });
});

Как и ожидалось при асинхронном запросе, консоль не регистрирует новых пользователей в правильном порядке. Будет ли решение, чтобы это исправить? Я пробовал с async/await, как показано ниже, но не повезло.

users.map(async (user, index) => {
    await db.db.collection('objects').aggregate([{ $sample: { size: Math.floor(Math.random() * 5) }}]).toArray((err, res) => {
         ...
    });
 });

Спасибо

...