Прежде всего find возвращает курсор, а если вам нужен только первый документ (docs [0]), это либо connection.arrayelements.findOne({})
, либо connection.arrayelements.find({}).next()
.
Следующая проблема: updateMany и next принимают ответные вызовы или возвращают обещания.Вы не используете обещание, возвращенное updateMany в своем фрагменте, и это ошибка.Ваше заявление о поиске может вернуть результаты до того, как произошло обновление, в зависимости от условий гонки.
Наконец, использование setInterval весьма опрометчиво.Если вам нужно повторять операторы updateMany
в цикле, пока результат поиска не будет соответствовать вашим критериям - просто сделайте это.С синтаксисом async / await это так просто:
exports.Arrayelements = async function(req, res) {
const elementName = req.body.elementName;
do {
await connection.arrayelements.updateMany({}, { $push: { sampleArray: [elementName] } }, { upsert: true });
const doc = await connection.arrayelements.findOne({});
} while(doc.elementName.length >= 2);
// call this function
}