统计集合的记录,直到找到文档记录
Count the records of a collection until a documents record is found
我有一个名为 UserSubmissions 的集合,其中包含以下文档:
- Choice - 存储用户输入的选择,数据只在A或B之间
- 状态 - 存储用户输入的状态,无论是正确还是错误。数据存储为 "Correct" 和 "Wrong".
- 日期 - 存储提交日期
- UserID - 登录应用的用户 ID
- QuestionID - 用户正在回答的问题的 ID
总的来说,这个集合存储了所有登录用户对不同问题的提交以及每个提交的状态。
我想统计用户连续回答最多 6 个问题的次数。
这是我在 Meteor 应用程序中尝试过的:
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 可能有一个我缺少的内置查询功能。
为了让它更简洁,试试这个:
var total = UserSubmissions.find(
{UserID: userid, Status: "Correct"},
{limit:5}
).count();
没有订单就数数 "consecutively" 是没有意义的。我想你想使用 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 } })
}
我有一个名为 UserSubmissions 的集合,其中包含以下文档:
- Choice - 存储用户输入的选择,数据只在A或B之间
- 状态 - 存储用户输入的状态,无论是正确还是错误。数据存储为 "Correct" 和 "Wrong".
- 日期 - 存储提交日期
- UserID - 登录应用的用户 ID
- QuestionID - 用户正在回答的问题的 ID
总的来说,这个集合存储了所有登录用户对不同问题的提交以及每个提交的状态。
我想统计用户连续回答最多 6 个问题的次数。
这是我在 Meteor 应用程序中尝试过的:
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 可能有一个我缺少的内置查询功能。
为了让它更简洁,试试这个:
var total = UserSubmissions.find(
{UserID: userid, Status: "Correct"},
{limit:5}
).count();
没有订单就数数 "consecutively" 是没有意义的。我想你想使用 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 } })
}