以下是我使用mongoose / node -
的要求如果用户是在14年之前创建的,则用户只能登录系统。如果用户尝试登录并且他们是14天,则他们不再有效,需要向管理员询问扩展名。
我想要做的事情(无论这是否正确)是在获取所有用户时,搜索14天或更久前创建的用户并将过期字段设置为true(我可以在验证时查看此信息)我还希望这在UI中显示一个单独的表,只显示过期的用户。)
我最初认为在createdDate字段中设置'expires'会起作用,但会删除我不想要的记录。
这是我的UserSchema和我当前的getAllUsers函数。我没有任何东西可以尝试解决这个问题。
var UserSchema = new Schema({
name: String,
email: { type: String, lowercase: true },
role: {type: String, default: 'user' },
hashedPassword: String,
provider: String,
salt: String,
assignedFile: Schema.Types.Mixed,
createdDate: { type: Date, default: Date.now },
expired: Boolean
});
exports.index = function(req, res) {
User.find({}, '-salt -hashedPassword', function (err, users) {
console.log(users)
if(err) return res.status(500).send(err);
res.status(200).json(users);
});
};
答案 0 :(得分:4)
要过滤日期,您需要$lt或$lte。您还需要动态设置过滤日期。例如:
var now = new Date();
// Set the date 14 days in the past
now = new Date(now.setDate(now.getDate()-14));
这将返回所有未登录超过14天的用户:
User.find({createdDate: {$lte: now}}, '-salt -hashedPassword', function (err, users) {
console.log(users);
if(err) return res.status(500).send(err);
res.status(200).json(users);
});
如果您想更新expired
布尔值,则需要更新多个文档:
// $set allows you to update one or more values without updating the whole document
// multi: true allows you to update multiple documents at the same time
User.update({createdDate: {$lte: now}}, {$set: {expired: true}}, {multi: true}).exec(function (err, users) {
console.log(users);
if(err) return res.status(500).send(err);
res.status(200).json(users);
});
以上功能仅更新文档。如果你想每天自动运行这个功能,你需要打电话"这个功能在cronjob中。