2016-09-19 7 views
0

それで、私が作成しようとしていることについての少しの背景。私は投票アプリケーションを構築しようとしています。ここでは、MongoDbデータベースにオプションを格納し、各オプションのカウンタを使用して、各オプションについて投票した回数を確認します。私が実装したデータ構造は次のようになります。可変フィールド名を使用してmongodbフィールドを増やす方法は?

_id:"57dfecfa3832360f46e183c2" 
options:"iea, aoegboae, aoeugoa, ougr, gege" 
options_counter:Object 
0:0 
1:0 
2:0 
3:0 
4:0 
__proto__:Object 
title:"hr" 

これらの数字[0,1,2,3,4]はオプションを表し、コロンの後の数字はそれぞれのカウンタを表します。必要なカウンタを更新するMy機能はfieldToIncrement変数がそれは未定義のプロパティフィールドを見つけることができないというエラーを返す使用して、しかし

var fieldToIncrement = db.collection('polls').options_counter.field; 
     db.collection('polls').findOneAndUpdate(
      {_id: user_id}, 
      {$inc: {fieldToIncrement: 1}}, 
      {upsert:false}, 
      {returnNewDocument: true} 
     ).toArray(function(err, doc){ 
      if(err){ 
       throw new Error(err); 
      }if(doc){ 
       console.log(doc); 
       //callback(null, doc); 
      } 
     }); 

下に表示されます。可変フィールドには、1だけインクリメントする必要があるoptions_counterオブジェクトの特定のキーを指定する番号が含まれています。元のドキュメント内にoptions_counterを埋め込んでいます。私の質問は、MongoDbがoptions_counterオブジェクト内の特定のキー値のペアを見つけて更新するように構文を設定し、そのカウンタを1ずつインクリメントする方法です。

+0

いくつかの問題がありますが、その値を表示するために 'console.log(fieldToIncrement)'を呼び出すことから始めます。それはおそらくあなたが思うものではないでしょう。 – JohnnyHK

+0

したがって、上記の構文を使用してfieldToIncrementを定義すると、定義されていないオブジェクトのプロパティにアクセスしようとしているため、エラーが返されます。私はoptions_counter.fieldだけに変更しようとしましたが、options_counterはデータベース外ではアクセスできないため、エラーも返されます。あなたが見ている他のエラーは何ですか? –

答えて

1

"options_counter"は埋め込みドキュメントですが、これはvar fieldToIncrementはoptions_count.0のようなものでなければなりません。 私はあなたの質問にこれを見ることができません。

fieldToIncrementを定義する場所でコードを共有してください、あなたが言及したエラーでも述べられているように未定義になっているようです:「fieldToIncrement変数を使用すると、未定義のプロパティフィールドが見つかりません。

+0

2番目のコードブロックの最初の行に定義しました。 var fieldToIncrement = db.collection( 'polls')。options_counter.field; 私はあなたの提案した方法を試しましたが、options_counterはdb.collection関数内でしかアクセスできないので、エラーも返されます –

+1

次のように変更する必要があります:var fieldToIncrement = {$ inc:{options_counter.0:1}} 。 {inc .....}行の代わりに、その変数を使用してください。 – HoefMeistert

+0

それで、私はそれをしました。しかし、それは文書に何の影響も与えていないようです。ドキュメントは返されますが、更新の影響はありません。 –

関連する問題