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