2017-04-05 17 views
1

私はオブジェクトをmongooseの配列にプッシュしようとしますが、いつでもその長さをこのように置きます(mongoose、属性はat schoolcomment下部)、私はデータベースのmlab.comを使用しています。私はオブジェクトを配列のmongooseにプッシュし、配列はその長さしか格納しません

{ 
    "_id": { 
     "$oid": "58e17ee3e24dfb1f70d76460" 
    }, 
    "schoolName": "Koc Universitesi", 
    "schoolIlce": "Sariyer", 
    "schoolSehir": "Istanbul", 
    "schoolId": 981299, 
    "__v": 5, 
    "schoolComments": [ 
     3 
    ] 
} 

これは

app.post('/comment', function(req, res){ 
    if(req.session.user && req.session){ 
    User.findOne({email: req.session.user.email}, function(err, user){ 
    if(err) { 
     res.send('error'); 
    } 
    if(user){ 
     if(req.session.user.password === user.password){ 
     var thisID = user.userid; 
     Universite.findOne({schoolName: req.body.collegeName}, function(err, college){ 
      if(err) res.send('error'); 
      if(college){ 
       college.set({schoolComments: college.schoolComments.push({thisID: req.body.comment})}).save(function(err){ 
       if(err){ 
        res.render('errors', {error:'Error'}); 
       }else{ 
        res.locals.college = college; 
        res.locals.user = user; 
        res.render('universiteinfoUser'); 
       } 
       }); 
      } 
     }); 
     }else{ 
     res.render('login', {}); 
     } 
     } 
    }); 
    } 
}); 

(コメントはこのような理由により、HTMLで表示されない)ノードJSの私のコードであり、これはそれのためにHTML DOMフォームです。この理由のためコメントは表示されません。

<form onkeypress="enterPress();" action="/comment" method="post"> 
      <textarea maxlength="100" style="font-size: 25px;" name="comment" rows="3" cols="50" placeholder="Yorumunuzu yazin..."></textarea><br> 
      <input style="display: none; visibility: hidden;" type="text" name="collegeName" value="<%=college.schoolName%>"></input> 
      <button type="submit" name="commentSubmit">Comment Submit</button> 
     </form> 
      <div class="userCommentDisplay"> 
      <ul> 
       <%college.schoolComments.forEach(function(item, i){%> 
        <%var k = college.schoolComments[i]%> 
        <%for(key in k){%> 
        <%if(key === user.userid){%> 
         <li><%=k[key]%> Same</li> 
        <%}else{%> 
         <li><%=k[key]%></li> 
        <%}%> 
        <%}%> 
       <%})%> 
      </ul> 
      </div> 

答えて

0

あなたは(ダイナミックなフィールド名を設定する)findOneAndUpdateを使用して動的にコメント項目を構築したいことがあります。私は、変更された文書を返すために{ new: true }をadedまし

var item = {}; 
item[user.userid] = req.body.comment; 

Universite.findOneAndUpdate({ 
    schoolName: req.body.collegeName 
}, { 
    $push: { 
     "schoolComments": item 
    } 
}, { new: true }, function(err, college) { 
    if (err) { 
     res.render('errors', { error: 'Error' }); 
    } else { 
     res.locals.college = college; 
     res.locals.user = user; 
     res.render('universiteinfoUser'); 
    } 
}); 

注意をcollege変更されていないものの代わりに。

FYI、あなたのコードでは、あなたが

+0

college.schoolComments.pushありがとう使って、配列の新しい長さを返しますJS方法Array.prototype.push()を使用している、それが今で正常に動作します。間違いなく試作品だった –

関連する問題