簡體   English   中英

貓鼬查找,執行邏輯,然后在同一集合上進行更新

[英]Mongoose find, execute logic, then update on the same collection

我需要找到一個文檔,檢查其字段中的某些條件,然后根據條件的結果執行一項操作或其他操作。 這是在請求處理內部,因此我必須根據結果在響應中返回不同的內容。

我有一個使用findOneAndUpdate完成的解決方案,並且如果返回的記錄為0,我將返回錯誤狀態,但是我很好奇理解以下原因為何不起作用:

Users.findOne({'username':someVariable}).then((output)=>{

     if(output.someFiled > someCondition){
          Users.update(
              {'username':someVariable},
              {$set: {....}}
          ).then((error, num, success) =>{
              if(success){
                  return res.status(200).send('UPDATE OK');
              }
              if(error){
                  return res.status(500).....;
              }
          });
     } else {
         return res.status(404).....;
     }        

}).catch(....;

特別是在find.then內的Users.update時,總是返回num:

{ ok: 0, n: 0, nModified: 0 }

這意味着盡管確實在第一個findOne中找到了記錄,但未找到任何記錄。

編輯:有關庫的更多信息,因為可能是更新它們的問題(來自package.json):

"bluebird": "^3.4.6",
"mongodb": "^3.0.2",
"mongoose": "^4.12.4",

謝謝,T。

發現了問題:用戶的模型文件沒有我要更新的字段。 如果模型沒有聲明此類字段,則“查找”部分也起作用,但“更新”部分則不起作用。

所以,就是這樣,應該已經閱讀了所有代碼,但我認為這很無聊。

您必須在findOne使用(err,output)

Users.findOne({'username':someVariable}).then((err,output)=>{

     if(output.someFiled > someCondition){
          Users.update(
              {'username':someVariable},
              {$set: {....}}
          ).then((error, num, success) =>{
              if(success){
                  return res.status(200).send('UPDATE OK');
              }
              if(error){
                  return res.status(500).....;
              }
          });
     } else {
         return res.status(404).....;
     }        

}).catch(....;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM