【问题标题】:How to hold method untill array has 2 elements in mongodb如何保持方法直到数组在mongodb中有2个元素
【发布时间】:2019-10-19 18:18:21
【问题描述】:

我想保留该方法,直到数组使用 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
        }
    });
}

【问题讨论】:

  • 我猜你需要投票,使用setInterval或类似的
  • 谢谢@Thilo,我会努力的。实际上是 node js 和 mongodb 的新手

标签: javascript node.js mongodb mean-stack mean


【解决方案1】:

首先find 返回一个游标,如果您只需要第一个文档(docs[0]),它可以是connection.arrayelements.findOne({})connection.arrayelements.find({}).next()

下一个问题是updateManynext 都接受回调或返回承诺。您没有在 sn-p 中使用 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
}

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多