计算集合的记录,直到找到文档记录

时间:2015-02-13 14:04:35

标签: mongodb meteor

我有一个名为 UserSubmissions 的集合,其中包含以下文档:

  1. 选择 - 存储用户输入的选项,数据仅在A或B之间
  2. 状态 - 存储用户输入的状态,无论是正确还是错误。数据存储为“正确”和“错误”。
  3. 日期 - 存储提交日期
  4. UserID - 登录应用程序的用户的ID
  5. QuestionID - 用户正在回答的问题的ID
  6. 总的来说,这个集合存储了所有登录的用户提交的提交内容以及每个提交的状态。

    我想计算用户最多提出6个问题的连续答案数。

    这就是我在Meteor App中尝试的内容:

    var total = UserSubmissions.find({UserID: userid}).count();
            var count = 0;
            for ( var i = 0 ; i < 6 ; i++ ) {
                if ( UserSubmissions.find({UserID: userid}, { sort: {Date: -1}}).fetch()[abs(total - 1 - i)].Status == "Correct") {
                    count++;
                }
            }
    

    尝试使用辅助函数,但它不起作用。不知道我哪里错了。 Mongo可能有一个内置的查询功能,我不知道。

2 个答案:

答案 0 :(得分:0)

为了使它更简洁,试试这个:

var total = UserSubmissions.find(
  {UserID: userid, Status: "Correct"},
  {limit:5}
).count();

答案 1 :(得分:0)

连续计算某些东西是不合理的#34;没有订单。我想你想用Date?如果是这样的话,我会编写一个函数来计算连续答案的当前条纹(使用shell表示法,因为我不熟悉Meteor)

function streak(userid) {
    var lastWrong = db.UserSubmissions.find({ "UserID" : userid, "Status" : "Wrong" }).sort({ "Date" : -1 }).limit(1).toArray()
    if (lastWrong.length === 0) // user has never been wrong!
        return db.UserSubmissions.count({ "UserID" : userid })
    var lastWrongDate = lastWrong[0].Date
    return db.UserSubmissions.count({ "UserID" : userid, "Date" : { "$gt" : lastWrongDate } })
}