2017-11-16 2 views
0

私は、次のスキーマ持っている内部の値をインクリメント:文書のマングース - 配列

var mySchema = new Schema({ 
    "name": String, 
    "users": [ 
    { 
     "user_id": ObjectId, 
     "counter": Number 
    }] 
}); 

例:

{ 
    "name": "Test", 
    "users": [ 
     { 
      "user_id": "aaaaaa", 
      "counter": 2 
     }, 
     { 
      "user_id": "bbbbbb", 
      "counter": 3 
     }] 
} 

をどのようにすることができ、私findOneAndUpdate特定user_idcounterをインクリメント?

たとえば、Testを検索してcounteruser_id: bbbbbに更新するにはどうすればよいですか?

+1

あなたはこれまでに何を試しましたか? –

+0

これまでのところ私は避けたい2つのクエリを実行しています: "Test"でドキュメントを見つけること。次に配列に行き、特定のカウンタを更新します。して保存する 私は1つのクエリでこれを行う方法がわからない –

答えて

2
mongoose.model('MySchema', mySchema); //is this line superflous?? 
var MySchema = mongoose.model('MySchema'); 

MySchema.update({"name": "Test", "users.user_id" : "aaaaaa" } , 
       {$inc : {"users.$.counter" : 1} }, 
       function() {...}); 

したがって、最初のオブジェクトでは、更新するオブジェクトが見つかります。 2番目のパラメータは更新するもので、$はクエリで現在選択されているオブジェクトのみを変更するために使用されます。最後のパラメータはコールバックです。