Javascript 流星排行榜示例:重置分数
我一直在尝试做Meteor的排行榜示例,但我被第二个练习卡住了,重新设置了分数。到目前为止,我得到的最远信息是:Javascript 流星排行榜示例:重置分数,javascript,node.js,mongodb,meteor,Javascript,Node.js,Mongodb,Meteor,我一直在尝试做Meteor的排行榜示例,但我被第二个练习卡住了,重新设置了分数。到目前为止,我得到的最远信息是: // On server startup, create some players if the database is empty. if (Meteor.isServer) { Meteor.startup(function () { if (Players.find().count() === 0) { var names = ["Ada Lovelac
// On server startup, create some players if the database is empty.
if (Meteor.isServer) {
Meteor.startup(function () {
if (Players.find().count() === 0) {
var names = ["Ada Lovelace",
"Grace Hopper",
"Marie Curie",
"Carl Friedrich Gauss",
"Nikola Tesla",
"Claude Shannon"];
for (var i = 0; i < names.length; i++)
Players.insert({name: names[i]}, {score: Math.floor(Random.fraction()*10)*5});
}
});
Meteor.methods({
whymanwhy: function(){
Players.update({},{score: Math.floor(Random.fraction()*10)*5});
},
}
)};
问题是{}应该选择MongoDB集合中的所有文档,但是它创建了一个随机分数的新的空白科学家。为什么?{}应该选择所有内容。我尝试了“_id”:{$exists:true},但我认为这是一个难题。加上它的行为与{}相同
有没有更优雅的方法?流星的网页上说:
制作一个按钮,将每个人的分数重置为随机数。(那里
在服务器启动代码中已经有这样做的代码。您可以考虑吗
这些代码中的一部分将被删除,并在客户端和服务器上运行
服务器?)
首先,要在客户机上运行此操作,我需要显式指定集合中每个文档的_ID,而不是使用服务器的方法并将结果推回客户机,否则我将遇到“错误:不允许。不受信任的代码可能只按ID[403]更新文档”。但是我怎么能得到呢?或者我应该简单地使用collection.allow()?还是这是唯一的办法?我想你错过了两件事:
{multi:true}
,以进行更新,否则它将只更改一条记录$set
。否则,更新将假定您提供了所需的完整新文档,并替换原始文档Players.update({},{$set: {score: Math.floor(Random.fraction()*10)*5}}, {multi:true});
关于这一点的讨论相当彻底
Players.update({},{$set: {score: Math.floor(Random.fraction()*10)*5}}, {multi:true});