我用mongoose将一个对象推送到我的数组,数组只存储它的长度

时间:2017-04-05 22:44:18

标签: arrays node.js mongodb mongoose

我尝试用mongoose将一个对象推入一个数组,但每当我这样做时,它会像这样设置它的长度(mongoose,属性是schoolComment在底部),我使用mlab.com作为数据库。

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

这是我在节点JS中的代码(因为这个原因,评论没有出现在html中)

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 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>

1 个答案:

答案 0 :(得分:0)

您可能希望使用findOneAndUpdate并动态构建评论项目(以设置动态字段名称):

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');
    }
});

请注意,为了返回修改后的文档{ new: true }而不是未修改的文档,我已经college了。

仅供参考,在您的代码中,您使用了JS方法Array.prototype.push(),它将使用college.schoolComments.push

返回数组的新长度