首先
find
返回一个光标,如果您只需要第一个文档(docs[0]),则
connection.arrayelements.findOne({})
或
connection.arrayelements.find({}).next()
.
下一个问题是
updateMany
和
next
接受回扣或退回承诺您没有在代码片段中使用updateMany返回的承诺,这是一个错误您的find语句可能在更新发生之前返回结果,具体取决于竞赛条件。
最后,使用setInterval是不明智的如果你需要重复
updateMany
循环中的语句,直到find的结果与您的条件匹配为止—只需执行它使用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
}