2017-09-01 165 views
-1

我需要更新數組字段,如果數組只剩下3個值在數組中。 例如,如果有文件 users = [ {name: 'aaaaaa', tags: ['a','b','c','d']}, {name: 'bbbbbb', tags: ['a2','b2','c2','d2', e2]}, ] 在結果,我想接收 users = [ {name: 'aaaaaa', tags: ['a','b','c']}, {name: 'bbbbbb', tags: ['a2','b2','c2']}, ] 或者,如果可以,我想要查詢數組長度和更新陣列中的一個請求。我想推到數組值,如果數組超過3,只需刪除第一個元素,並且所有操作都必須在一個請求中,因爲JS是異步的,我不能使用js代碼來完成此操作。Nodejs mongoose mongodb

回答

0

我想你有用戶貓鼬模型。 因此,要按照自己的方式更新文檔,必須更新每個文檔。

Users.find({},(err, users)=>{ 
    users.forEach(user=>{ 
     if(user.tags.length > 3){ 
      user.tags.splice(0,1); //Removes first element from array 
      user.save(err=>{ if(err) console.log(err); }); //Saves modified document 
     } 
    }); 
}); 
+0

這是錯誤的方法。如果我的服務器同時收到兩個請求,首先請求選擇用戶數據,然後請求選擇用戶數據,然後首先請求更改數據並保存它們,第二個請求更改數據,當它將要保存時,第二個請求將替換數據,被第一個請求更改 –

+0

您沒有正確描述您的問題。你問了如何在一個請求中更新來自mongo的文檔數組。上面的代碼解決了這個問題。如果您希望在收到請求後更新數據庫,則每次收到請求時都會更新收集。我只能建議你理清架構和實現 – Goolishka

相關問題