#node.js #mongodb #mongoose
#node.js #mongodb #мангуст
Вопрос:
У меня есть коллекция Mongo с несколькими записями thoundsand, и я хочу запустить .findOneAndUpdate() для каждой записи. Существует ли операция Mongo или около того для перебора коллекции отверстий? В моем приложении я вызываю API и получаю около 4000 ответов. Что я хочу сделать сейчас, так это проверить, получил ли я ответы в своей базе данных, и добавить новые данные из ответа к моим существующим данным.
В настоящее время я делаю
response.forEach((entry) => {
model.findOneAndUpdate( ... )
}
Команда .findOneAndUpdate() работает для одного, но не для моего цикла. И я не думаю, что это хорошее решение для перебора всего в моем узловом приложении.
Комментарии:
1. Это не работает в вашем цикле, потому что вам нужно использовать await перед model.find…..
2. Спасибо, это сработало. Но сейчас я не знаю, правильно ли выполнять цикл в моем приложении Node или мне лучше использовать для этого операции Mongo. Есть мысли по этому поводу?
3. Хорошо, значит, вам нужно делать это раз в неделю. Лучший способ сделать это — запустить планировщик и передать функцию в этом, что вы можете сделать, это использовать параметры mongodb skip и limit
4. И обновите пользователей в определенной группе или ограничьте, например, сначала выполните операцию с первыми 1000 пользователями, затем со следующими 1000 и так далее
5. Это поможет вам, не делая так много итераций одновременно, тем самым уменьшая нагрузку на сервер.
Ответ №1:
Вы можете использовать обещание
const promiseArray = response.map((entry) => model.findOneAndUpdate( ... ))
Promise.all(promiseArray).then(....)
или вы можете дождаться обещания.все, а затем продолжайте свою работу
Ответ №2:
Мне просто нужно было сделать мою функцию асинхронной.
response.forEach(async (entry) => {
await model.findOneAndUpdate( ... )
}