2017-09-01 9 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以上の場合は、最初の要素を削除し、すべてのアクションが1つの要求にする必要があります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

これは間違った方法です。私のサーバが同時に2つのリクエストを受信した場合、最初にユーザのデータを選択し、2番目のリクエストでユーザのデータを選択し、次に変更データを要求して保存し、2番目のリクエストチェンジデータを保存します。最初のリクエストによって変更されました –

+0

あなたは問題を適切に記述していませんでした。 1回のリクエストでmongoからドキュメントの配列を更新する方法を尋ねました。上のコードはこの問題を解決します。リクエストが受信された後にdbを更新する場合は、リクエストが受信されるたびにコレクションが更新されます。私はあなただけがアーキテクチャと実現を選ぶことをお勧めすることができます – Goolishka

関連する問題