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

Posted

技术标签:

【中文标题】如何保持方法直到数组在mongodb中有2个元素【英文标题】:How to hold method untill array has 2 elements in mongodb 【发布时间】: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 的新手 【参考方案1】:

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

下一个问题是updateMany 和next 都接受回调或返回承诺。您没有在 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

【讨论】:

以上是关于如何保持方法直到数组在mongodb中有2个元素的主要内容,如果未能解决你的问题,请参考以下文章

mongodb:如果元素不存在,则updateOne设置字符串数组,如果存在则保持不变

第 22 题:如何理解选择排序?

MongoDB如何将数组中的字段类型从字符串更改为数组并保持原始值

MongoDB 实用数组聚合操作 (2)

第 22 题:如何理解选择排序?

php实现全组合算法