Javascript 如何保持方法直到mongodb中的数组有2个元素

Javascript 如何保持方法直到mongodb中的数组有2个元素,javascript,node.js,mongodb,mean-stack,mean,Javascript,Node.js,Mongodb,Mean Stack,Mean,我希望保留该方法,直到数组使用nodejs和mongodb包含2个或更多元素 exports.Arrayelements = function(req, res) { var elementName = req.body.elementName; connection.arrayelements.updateMany({}, { $push: { sampleArray: [elementName] } }, { upsert: true }); connection.a

我希望保留该方法,直到数组使用nodejs和mongodb包含2个或更多元素

exports.Arrayelements = function(req, res) {
    var elementName = req.body.elementName;
    connection.arrayelements.updateMany({}, { $push: { sampleArray: [elementName] } }, { upsert: true });
    connection.arrayelements.find({}, function(err, docs) {
        if(err) throw err;
        if(docs[0].elementName.length >= 2) {
            // call this function
        } else {
            // want to call back again to push syntax until 2 or more elements in array
        }
    });
}
首先,返回一个游标,如果您只需要第一个文档(docs[0]),它可以是
connection.arrayelements.findOne({})
connection.arrayelements.find({}).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
}
首先,返回一个游标,如果您只需要第一个文档(docs[0]),它可以是
connection.arrayelements.findOne({})
connection.arrayelements.find({}).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
}

我想你需要投票,使用
setInterval
或诸如此类的谢谢@Thilo,我会试试。事实上,我对node js和mongodbI还不熟悉,我猜你需要使用
setInterval
或类似的方法来轮询,谢谢@Thilo,我会试试。事实上,我对NodeJS和mongodb是新手