我需要有关更新数据库中多个条目的meteor系列的帮助。下面的第一个Entries.update不起作用我相信因为meteor现在要求你按id更新。
'click #draw': ->
winner = _.shuffle(Entries.find(winner: {$ne: true}).fetch())[0]
if winner
Entries.update({recent: true}, {$set: {recent: false}}, {multi: true})
Entries.update(winner._id, $set: {winner: true, recent: true})
Template.entry.winner_class = ->
if this.recent then 'highlight' else ''
所以我尝试更改为以下代码。但是,它不能正常工作,因为它只会更改一个id(第一个)。
'click #draw': ->
winner = _.shuffle(Entries.find(winner: {$ne: true}).fetch())[0]
recent_winner = Entries.find(recent: true).fetch()
if winner
Entries.update(recent_winner._id, {$set: {recent: false}}, {multi: true})
Entries.update(winner._id, $set: {winner: true, recent: true})
Template.entry.winner_class = ->
if this.recent then 'highlight' else ''
任何帮助都将不胜感激。
答案 0 :(得分:2)
您需要通过Meteor.methods一次修改多个文档。来自the documentation:
更新的行为取决于是否被调用 受信任或不受信任的代码。可信代码包括服务器代码和 方法代码。不受信任的代码包括客户端代码,例如事件 处理程序和浏览器的JavaScript控制台。
可信代码可以通过将multi设置为一次来修改多个文档 是的,并且可以使用任意Mongo选择器来查找文档 修改。它绕过allow和deny设置的任何访问控制规则。 将从更新调用返回受影响文档的数量 如果你没有通过回调。
不受信任的代码只能一次修改单个文档 它的_id。只有在检查之后才允许修改 适用的允许和拒绝规则。受影响的文件数量 返回回调。不受信任的代码无法执行upsert, 除了在不安全模式下。
编辑:
举例来说,方法调用看起来像这样:
"click #draw": function(){
var winner = _.shuffle(Entries.find({winner: {$ne: true}}).fetch())[0];
if (!!winner){
Meteor.call(
"drawWinner", //an arbitrary method name of your choosing
winner, // passing it your winner
function(error, result){ // an optional async callback
if (error){
// handle error if error from method
} else {
// handle any return object from method
}
}
);
}
}
然后在您的方法调用中,它可能放在共享目录(如“lib”)或服务器端专用目录中(有关此方面的更多信息,请参阅Meteor文档):
Meteor.methods({
"drawWinner": function(winner){
Entries.update({recent: true}, {$set: {recent: false}}, {multi: true});
Entries.update(winner._id, {$set: {winner: true, recent: true}});
return winner; //or the like
}
});