搜索创建日期大于14天的用户,然后更新过期字段

时间:2015-10-30 14:54:43

标签: node.js mongodb mongoose

以下是我使用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);
  });
};

1 个答案:

答案 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中。