Python社区  »  MongoDB

如何在mongodb中保留方法直到数组有2个元素

vinaykumar0459 • 2 周前 • 26 次点击  

我想保持这个方法,直到数组有两个或更多使用nodejs和mongodb的元素。。

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
        }
    });
}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49225
 
26 次点击  
分享到微博
文章 [ 1 ]  |  最新文章 2 周前
Alex Blex
Reply   •   1 楼
Alex Blex    5 月前

首先 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
}