2017-11-28 10 views
0

私は1つのステートメントで複数のクエリを実行しようとしていでは正常に動作していないと私は私の$incステートメントを追加何らかの理由で、それが正常に動作する必要はありません。

私は構文エラーを取得していないと私は$inc行を削除すると、それが適切に返します。だから私はそれが問題だと確信しています。 $and作業の最初の2行は

db.collection("ActivityDefinition").findOneAndUpdate({ 
 
      $and: [ 
 
      {"activityDefinition.activityID": activityDefinition.activityID}, 
 
      {"activityDefinition.MAX_GROUP_ATTENDERS": { $gt: activityDefinition.totalAttendersAmount}}, 
 
      {$inc: {"activityDefinition.totalAttendersAmount": 1}} 
 
      ]}, { 
 
      activityDefinition 
 
      }, { 
 
      upsert: true, 
 
\t \t \t returnNewDocument: true 
 
      }, function(err, result) { 
 
      if(err) { 
 
       done(err); 
 
       return; 
 
      } 
 
      activities.push(activityDefinition); 
 
      done(); 
 
      return; 
 
     });

が、私は$incを使用する場合、何も返されません。ここに私の文です。 totalAttendersAmountを1つ増やそうとしています

答えて

1

実際に$ inc演算子はupdateクローズドであり、match節で使用しています。

MongoDBには、フィールドが$incのドキュメントがあります。あなたがドキュメントに書いたことが許されているので、MongoDBはその文句を言っていません。

あなたが番号をインクリメントしたい場合は、つもりseccond引数として$incを配置する必要があります。

引数のこの形状をしているfindOneAndUpdate方法:

findOneAndUpdate(<filter>, <update>, <options>) 

ニーズに適合し、ドキュメントからベースの例は次のようになります。

db.collection("ActivityDefinition").findOneAndUpdate(
    { "name" : "R. Stiles" }, // filter argument 
    { $inc: { "points" : 5 } } // update argument 
) 

Here is the documentation about the $inc operator.

And here is the documentation about the findOneAndUpdate method

それが役に立てば幸い!

+0

あなたは2番目の引数として '$のinc'を置くことによって何を意味するか説明できますか? –

+0

私はより明確になるように私の答えを更新する=) – renanpallin