Как перебирать коллекцию и выполнять операции — Mongodb, Nodejs

#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( ... )
}