2016-07-06 1 views
0

URLから取得したデータベースの配列から値を削除しようとしています。nodejsとmongooseを使用してデータベースの配列から値を削除する方法

私は以下のコードを使用しますが、何も得られません。それはforループには行きません。

app.get('/remove/:medid/:tokenid', function(req, res) { 
    var medid = req.params.medid; 
    var token = req.params.tokenid; 
    var query = { tokenid: token, mediaid !== 'undefined' && mediaid.length > 0 } 

    user.find(query).exec(function(err, result) { 

     if (err) { 
      res.send('erooooooor') 
     } 
     if (!result) { 
      res.send('whooops, you dont have any media yet :)') 
     } else { 
      console.log('its here') 
      for (var i in result.mediaid) { 
       console.log(i) 
       if (i == medid) { 
        user.update({ tokenid: token }, { $pull: { mediaid: medid } }, function(err, result2) { 
         if (err) { 
          res.send('an error happened') 
         } else { 
          console.log('deleted') 
           //res.send('your tokenid is '+ token) 
         } 
        }) 
       } else { 
        res.send('media id didnt match') 
       } 
      } 
     } 

    }); 
}); 

自分のデータベースは、3つのオブジェクトuseridと文字列でtokenidアレイあるmediaidを有しています。 UPDATED

app.get('/remove/:mediaid/:tokenid', function(req, res){ 
var medid = req.params.mediaid; 
var token = req.params.tokenid; 
var query = {tokenid: token, mediaid !== 'undefined' && mediaid.length > 0} 

また、私は私のmediaid配列がnullであるかどうかをチェックしたいと存在するが、このコード

mediaid !== 'undefined' && mediaid.length > 0 

答えて

2

あなたはおそらくあなたのクエリがトークンIDに基づいて聞かせなければならないライン

var query = {tokenid: token, mediaid !== 'undefined' && mediaid.length > 0} 

次のあなたのJSONの構文が間違って持っています。

var query = {tokenid: token}; 

はまた、あなたがループの反復ごとに、for(var i in result.mediaid)を書くとき、「私は」変数は、現在の要素ではなく、その値のインデックスが割り当てられます。したがって、if条件をi == medidの代わりにresult.mediaid[i] == medidに変更する必要があります。変更されたループは次のようになります。

for(var i in result.mediaid){ 
    console.log(i); 
    if(result.mediaid[i] === medid){ 
     user.update({tokenid: token}, {$pull: {mediaid: medid}},function(err, result2){ 
     if (err){ 
      res.send('an error happened'); 
     } 
     else{ 
      console.log('deleted'); 
      //res.send('your tokenid is '+ token) 
      } 
     }); 
    } 
} 
+0

私に答えることに感謝しますが、違いはありません!あなたはforの後にconsole.log(i)を見ますか?私はそれを実行すると私はコマンドプロンプトに表示されません! –

+0

DBにmediaidが保存されていない可能性があります。 result.mediaidが空の配列の場合、ループはまったく実行されません。ターミナルからmongodbを手動で照会することでこれを確認できます。 – elem4th

+0

いいえ。私のデータベースは大丈夫です。空でなければこの部分に行きますか? if(!result)?? –

0

をしてください、あなたがに置き換えることができ

を私はその印刷後にお勧めしますconsole.log(medid, token);

私は助けを望んでいます - ホセ・カルロス・ラモス

+0

ありがとうございます。あなたは何を変えましたか? –

+0

@ ShahrzadA mediaid <=> medid –

+0

ええ、私はそれを持っていますが、まだdoesnt仕事!それはforループに行きません! –

関連する問題