【问题标题】:NodeJS showing documents by timestamps with delayNodeJS按时间戳显示文档有延迟
【发布时间】:2019-07-19 08:11:44
【问题描述】:

我有 6 个用户层。这是他们应该做的:

  • 第一层:立即查看正在发布的帖子。
  • 第二层:60 分钟后查看相同的帖子
  • 第 3 层:120 分钟后查看同一帖子
  • 第 4 层:240 分钟后查看同一帖子
  • 第 5 层:360 分钟后查看同一帖子
  • 第 6 层:24 小时后查看同一帖子

每个用户在网站上注册时都会获得他们的tier 设置。

现在,当有人向网站发布数据时,mongoose 中的文档结构如下所示:

对于您看到的时间戳,我使用的是 moment.js 并且只是简单的函数:moment(); 这里的所有时间戳都是在用户层应该看到帖子时设置的。

现在我需要通过经过身份验证的用户层来获取这些文档。这就是我现在正在做的事情:

app.get('/', async(req, res) => {
    if(req.session.user && req.cookies.user_sid){
        let user = await User.findOne({username:req.session.user.username});
        if(user.group = "Tier 1") {
            let advertisements = await Advertisement.find();
            res.render('index', {user, advertisements});
             // TIER 1 SEES ALL POSTS IMMEDIATELY.
        }
        if(user.group = "Tier 2") {
            let advertisements = await Advertisement.find();
            // Now I need some logic here so the tier 2 users could see post after 60 minutes from when it was posted.
            res.render('index', {user, advertisements});
        }        
    } else {
    res.render('index');
    }
});

我不知道如何从tier 2获取结果

【问题讨论】:

    标签: javascript node.js mongodb datetime mongoose


    【解决方案1】:

    我认为您可能会发现存储每个广告添加到系统中的时间会更成功 - 这样您就可以根据用户的 tier 修改广告对象上的过滤器:

    // Imagine the following Advertisements:
    [
      {
        "name": "ad-1",
        "created_at": ISODate(2019-02-01)
      },
      {
        "name": "ad-2",
        "created_at": ISODate(2019-02-25)
      }
    ]
    
    let offset;
    if (user.group === "Tier-1") {
      offset = 0;
    } else if (user.group === "Tier-2" {
      offset = 60 * 60 // remember, it's in seconds!
    } else if (user.group === "Tier-3" {
      ....
    }
    
    const now = Date.now();
    
    await db.Users.find({
      "created_at" < (now - offset)
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      相关资源
      最近更新 更多