【问题标题】:Find objects created in last week in mongo在 mongo 中查找上周创建的对象
【发布时间】:2016-01-16 15:26:55
【问题描述】:

我有一个集合,其中有一个名为 timestamp 的字段,其中包含日期对象。我有这个问题:

db.articles.find({
    timestamp:{
       '$lte':new Date(),
       '$gte': //Something to get the last week's date
    }
})

如果可能的话,我可以按此文档中数组的长度对这些返回的文档进行排序吗?这是架构:

section: String,
title: String,
abstract: String,
url: String,
image: {
    url: String,
    caption: String
},
votes:{
    up: [ObjectID],
    down: [ObjectID]
},
comments:[ObjectID],
timestamp: Date

我想按votes.up 和votes.down 的差异大小对返回的对象进行排序。现在我在 Javascript 中对返回的对象进行排序,这实际上返回了数据。

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    似乎解决方案应该是这样的

    db.articles.find({
        timestamp: {
            $gte: new Date(new Date() - 7 * 60 * 60 * 24 * 1000)
        }
    });
    

    【讨论】:

    • 你能解释一下吗,7 * 60 * 60 * 24 * 1000
    • @RahulBera,上周意味着 7 天 * 每天 24 小时 * 每小时 60 分钟 * 每分钟 60 秒 * 每秒 1000 毫秒。
    • 你也可以使用Date.now() - 7 * 60 * 60 * 24 * 1000。
    【解决方案2】:

    我找到了获取上周创建的对象的解决方案。

    db.articles.find({timestamp:{'$lte':new Date(),'$gte':new Date(Date()-7)}})
    

    这样就完成了工作。但我不知道如何按数组大小对返回的对象进行排序。

    【讨论】:

    • Date() - 7 返回NaN
    【解决方案3】:

    它将返回上一周的数据,即从周日到上一周的周六,这是当地的周日是开始日。

            { 
              $match: {
                createdAt: { 
                  $gte: moment().day(-7).toDate(),
                   $lt: moment().startOf('week').toDate()
                },
              }
            }
          ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多