我正在尝试在我的流星应用程序中实现用户“组”系统。以下是组文档mongodb结构的简化示例:
{
"_id": "w74grb7GnaoqS4dMJ", //Id of the group
"name": "My beautiful group",
"createdAt": ISODate("2015-05-27T12:44:52.288Z"),
"createdBy": "7tKqK3bm72MK47ngH",
"users": [
"7tKqK3bm72MK47ngH" //Meteor user id array
],
"admins": [
"7tKqK3bm72MK47ngH"
],
"leaving_users": [
{
"user_id": "9zXdV6bm72MK47ngH",
"leaving_date": ISODate("2015-05-27T16:15:23.170Z")
}],
"modifiedAt": ISODate("2015-05-27T16:41:57.589Z"),
"modifiedBy": "FZ78Pr82JPz66Gc3p"
}
我想获得以下行为:
我遇到问题的部分是发送回布尔标志的服务器方法,意思是“让用户在过去的24小时内离开”。我想这与我的mongo请求有关,但我无法弄清楚出了什么问题。
这是我的方法代码:
Meteor.methods({
GroupRecentlyQuitted: function(groupId) {
//groups left by current user in the past 24h
if (Users.isInRoles(Meteor.userId(), ["user"])) {
var yesterday = new Date(new Date().getTime() - (24 * 60 * 60 * 1000));
return Groups.find({
_id: groupId,
"leaving_users.user_id": Meteor.userId(),
"leaving_users.leaving_date": {
$gte: yesterday
}
});
}
}
});
我称之为方法的客户端代码:
var RecentlyQuitted = false
Meteor.call("GroupRecentlyQuitted", me._id, function(error, result) {
if (error) {
console.log("error", error);
}
if (result) {
RecentlyQuitted = true
console.log(result);
}
});
此版本会抛出RangeError: Maximum call stack size exceeded
。我不知道为什么我也不知道如何从我的服务器方法执行获得更好的反馈(错误发生在方法中的Group.find查询期间)。
编辑:当我直接输入时,查询在robomongo中正常工作。
答案 0 :(得分:0)
好的,我设法使用@richsilv中的answer解决了这个问题(如果你读了我,谢谢老兄)。事实证明,您不能指望来自服务器的游标方法(仅限EJSON),只有发布提供游标。三天来想出来......: - )
总结一下,你不能在方法(即光标)中返回Collection.find()
。您需要使用Collection.findOne()
或使用Collection.find().fetch()