MongoDB(通过Meteor)在更新集合文档时将对象属性视为字符串

时间:2016-01-19 04:01:52

标签: javascript mongodb meteor

我的目标是使用包含具有“评级”值的“用户名”属性的对象更新集合文档。此对象将被推送到文档中已存在的“评级”数组。

无论出于何种原因,属性“username”被视为字符串而不是其变量值。正确地抓住并推送'评级'值。

Template.Rating.events({
  'submit form': function (event, template) {
    event.preventDefault();

    var form = template.find('form');
    var rating = template.find('input[name="rating"]:checked').value;
    var currentPun = Session.get('randomPun');
    var username = Meteor.user().username || null;

    console.log(username);
    Puns.update(
      { _id: currentPun._id},
      {
        $push: {
          // When pushing to ratings array, the {username: rating} object treats 'username' as a string instead of a variable.
          ratings: {username: rating}
        }
      }
    );
  }
});

我很困惑,因为中途的控制台日志会记录正确的用户名。

无论如何,由于发生了什么,收集文档中的'rating'数组看起来像这样:

[{username: 3}, {username: 5}, {username: 2}, {username: 4}]

而不是像这样:

[{joesmith: 3}, {janedoe: 5}, {kevincostner: 2}, {donaldtrump: 4}]

1 个答案:

答案 0 :(得分:3)

使用JavaScript对象,您无法使用文字对象表示法正确命名变量。您必须使用数组表示法。

所以对于你的例子,你会写:

var obj = {};

obj[username] = rating;

 Puns.update({ _id: currentPun._id}, {
    $push: {
      ratings: obj
    }
 });