【问题标题】:updateMany from Json Array Request Body in Mongodb来自 Mongodb 中 Json 数组请求正文的 updateMany
【发布时间】:2019-05-15 02:08:57
【问题描述】:

这是我的请求正文

{"old":[{"coba": "A"}, {"cobak": "B"}], "new":[{"coba": "C"},{"cobak": "D"}]}

这是我的代码

  function getOld(){

        const data = request.body; 
        for(i = 0; i < data.old.lenght; i++) { 
            return data.old[i]
        }
   }

    function getNew(){ 

        const data = request.body; 
        for(i = 0; i < data.new.lenght; i++) { 
            return data.new[i]
        }
    }

    const reqOld = getOld();
    const reqNew = getNew();

    db.cb.updateMany({$and: [reqOld]}, {$set: reqNew}, {upsert: false}, (error, data));

问题只是将第一个请求正文更新为 JSON 数组,它无法更新所有文档

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:
    1. 查看lenght 的拼写。
    2. 以这种方式进行更新,包含一组旧数组和一组新数组,似乎令人困惑。您应该可以只使用更新和_id
    3. 您可能需要编写一个循环来遍历所有项目。下面是伪代码——很难说你到底想做什么
    (async () => {
      for (let i = 0; i < request.body.old.length; i++) {
        const newItem = request.body.new[i];
        const oldItem = request.body.old[i];
        await db.cb.update(oldItem, {$set: newItem });
      }
    })()
    

    【讨论】:

    • 它可以工作,但是,得到一个错误:ERR_HTTP_HEADERS_SENT: Cannot set headers after they are sent to the client
    • for (let i = 0; i &lt; request.body.old.length; i++) { const newItem = request.body.new[i]; const oldItem = request.body.old[i]; db.cb.updateMany(oldItem, {$set: newItem }, {upsert: false}, (error, data) =&gt; { if(error){response.json(error.message)}else if(data){responden.json(data)}); }
    • 在调用 response.json 之前,您需要在响应中合并您尝试发送的所有数据——该方法发送 JSON 响应。我建议查看一个节点课程,以了解这些异步操作是如何工作的以及这里发生了什么。 coursera.org/learn/server-side-nodejs 看起来评价不错,并且喜欢它共享您尝试使用的堆栈
    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2020-07-31
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多