2016-04-14 7 views
0

私はmongodbとmongooseを新しくしました。私はノードjsを使用しています。サブ文書の配列の中の特定のフィールドを見つけて更新したいです。 は、ここに私のデータ構造です:subdoc mongooseの配列内で1つのフィールドを見つけて更新します

var PostSchema = new Schema({ 
title: String, 
comment: [ 
    { 
    name: String, 
    value: String 
    } 
], 
createdAt: Date, 
updateAt: Date 
}) 

これは私のデータの例である:私は_idているコメントを更新する必要が

{ 
    _id : 12, 
    title : 'some article here...', 
    comment : [{ 
       _id : 1, 
       name : 'joe', 
       value : 'wow that fantastic...' 
      },{ 
       _id : 2, 
       name : 'rocky', 
       value : 'really... thats insane...'      
      },{ 
       _id : 3, 
       name : 'jane', 
       value : 'i think its impossible to do...'     
      }], 
    createdAt : 2016-04-14 04:50:54.760Z, 
    updatedAt : 2016-04-14 04:50:54.760Z 
} 

:2、i「は、何になる値を変更したいです? '私は更新しようとします:

Post.findOne({'_id': 12, 'comment._id': 2}, {_id: 0, 'comment.$': 1}, function (err, cb) { 
    cb.comment.value = 'what???' 
    cb.save() 
}) 

しかし、それは失敗しました...あなたは私を助けることができますか?おかげ

+0

http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate findOneAndUpdateと位置演算子$を使用することができます –

答えて

2

あなたは、特定のコメント値を更新するために

Post.findOneAndUpdate({"_id": 12, "comment._id": 2}, 
     { 
      $set: { 
       "comment.$.value ": "New value set here" 
      } 
     }, 
     { new: true } // return updated post 
     ).exec(function(error, post) { 
      if(error) { 
       return res.status(400).send({msg: 'Update failed!'}); 
      } 

      return res.status(200).send(post); 
     }); 
+0

それは何のエラーを返しません。私のデータはmongoではまったく変わらない。私のデータベースでは、コメントはサブ文書の配列です。おそらく、そのコメントを編集するために配列の番号が必要です。 – lutfi

+0

コンソールで 'error'と' post'をチェックしてみましたか? –

関連する問題