我的目标是使用包含具有“评级”值的“用户名”属性的对象更新集合文档。此对象将被推送到文档中已存在的“评级”数组。
无论出于何种原因,属性“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}]
答案 0 :(得分:3)
使用JavaScript对象,您无法使用文字对象表示法正确命名变量。您必须使用数组表示法。
所以对于你的例子,你会写:
var obj = {};
obj[username] = rating;
Puns.update({ _id: currentPun._id}, {
$push: {
ratings: obj
}
});