【发布时间】:2016-06-09 06:40:13
【问题描述】:
我有一系列网站,可以对它们进行投票或反对。在集合中是一个空数组,通过将 userId 插入到数组中来跟踪已经投票的用户
问题:我可以插入用户 ID 甚至用户名,但它只将 id/name 变量存储为当时的字符串。如果我再次点击投票,前一个元素将变为整数。似乎只有当我在它们周围加上“”时,字符串才会保留。但我正在使用一个变量来获取用户 ID/名称。当我把“”放在它周围时,我真的得到“theVariable”,没有帮助。我已经尝试了所有我能想到的......感谢任何帮助。
架构
{
url:url,
title:title,
description:description,
createdOn:new Date(),
createdBy:Meteor.user()._id,
votes: 0,
upVotes: 0,
downVotes: 0,
voted: []
}
代码
"click .js-downvote":function(event){
// access the id for the website in the database
var website_id = this._id;
console.log("Down voting website with id "+website_id);
//add a down vote
var user = Meteor.user()._id;
if (user){
var theUser = this.voted.push(user);
Websites.update({_id:website_id}, {$inc: {votes: 1}}, {$inc:{downVotes: -1 }}, {$push:{voted: theUser}});
}
console.log(this.voted);
return false;// prevent the button from reloading the page
}
每次单击时我都会在控制台得到输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "mWe4r2JcfhRAvn97y"]
首先我得到了字符串,然后对于随后的每次单击,字符串都会向下移动,第一个元素变成一个数字。我每次都需要存储用户标识。所以我可以检查它是否允许投票。
【问题讨论】:
-
哪一行和哪一个内容将这个记录到控制台?此外,您不需要 三个
.update()语句,因为它们都应该在一个中,并且确实需要检查用户是否已经在voted数组中:.update({ "_id": website_id, "voted": { "$ne": Mereor.user()._id } },{ "$inc": { "votes": 1, "downvotes": -1 }, "$push": { "voted": Meteor.user()._id } })还要注意你不想“推动”一个“数组”,而只是这个项目。不确定您的想法是围绕保留另一个数组而不是更新的项目。有点困惑你的问题出在哪里。 -
我可能怀疑你的 "moves down" 实际上是我刚才提到的将数组插入数组的行为。
-
所以我包含了日志调用并将我的更新调用都放在了一个中。问题是当我把它合二为一时它不起作用。我把它们分开了,很好。
标签: javascript arrays mongodb meteor