Meteor 示例中仅允许1个RSVP

Meteor 示例中仅允许1个RSVP,meteor,Meteor,流星派对示例: 限制每个用户1个RSVP的最有效方法是什么?我只想以某种方式修改RSVP方法,但不确定如何进行 我的一般想法是这样的: if(Parties.find({rsvps:{user}}) > 1 ) if (Parties.find({'rsvps.user': this.userId}).count()) return; 任何帮助都将不胜感激 您的想法基本正确:在model.js中为rsvp函数添加一个检查。以下是parties集合的架构: /* Each party

流星派对示例:

限制每个用户1个RSVP的最有效方法是什么?我只想以某种方式修改RSVP方法,但不确定如何进行

我的一般想法是这样的:

if(Parties.find({rsvps:{user}}) > 1 )
if (Parties.find({'rsvps.user': this.userId}).count()) return;

任何帮助都将不胜感激

您的想法基本正确:在model.js中为rsvp函数添加一个检查。以下是parties集合的架构:

/*   Each party is represented by a document in the Parties collection:
    owner: user id
    x, y: Number (screen coordinates in the interval [0, 1])
    title, description: String
    public: Boolean
    invited: Array of user id's that are invited (only if !public)
    rsvps: Array of objects like {user: userId, rsvp: "yes"} (or "no"/"maybe")
*/
要检查用户是否已经拥有rsvp,您需要向该函数添加一行,如下所示:

if(Parties.find({rsvps:{user}}) > 1 )
if (Parties.find({'rsvps.user': this.userId}).count()) return;
这基本上行得通。不过,还有一个次要的竞争条件,即一个用户可以快速连续呼叫rsvp两次,该检查可以通过两次更新,然后他将被rsvp发送两次。有很多方法可以解决这个问题(例如:某种形式的两阶段提交…),但它们更为复杂