【问题标题】:Query on date for posts created the last 24h查询最近 24 小时创建的帖子的日期
【发布时间】:2015-09-19 15:27:06
【问题描述】:

我有这个架构,其中包含字段“created_at”的日期:

var post = new mongoose.Schema({
    text : String,
    created_at : {type : Date, index : true},
    pos : {latitude: Number, longitude: Number},
    created_by : {type : Schema.Types.ObjectId, ref : "UserSchema"}
});

有了这个:

Post.pre("save", function (next){
    var currentDate = new Date();

    if(!this.created_at)
    {
        this.created_at = currentDate;
    }
    next();
});

现在我只想要最近 24 小时创建的帖子,我该如何查询?

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongodb-query


    【解决方案1】:

    要获取过去 24 小时内创建的帖子,您可以获取当前时间,减去 24 小时并获取开始日期的值以用于您的日期范围查询:

    var start = new Date(new Date().getTime() - (24 * 60 * 60 * 1000));
    
    Post.find({ "created_at": { "$gte": start } }).exec(callback);
    

    如果您想了解更多关于$gte的信息,请查看以下文章:

    https://docs.mongodb.org/manual/reference/operator/query/gte/


    使用 momentjs 库可以很简单

    var start = moment().subtract(24, 'hours').toDate();
    Post.find({ "created_at": { "$gte": start } }).exec(callback);
    

    您还可以使用函数而不是 pre hook 中间件定义日期 default

    var post = new mongoose.Schema({
        text : String,
        created_at : {type : Date, default: Date.now, index : true},
        pos : {latitude: Number, longitude: Number},
        created_by : {type : Schema.Types.ObjectId, ref : "UserSchema"}
    });
    

    【讨论】:

    • 我试过这个: var start = moment().substract(1, "day");但这会引发错误“未定义不是函数”。
    • @JohnyBro 您在使用之前是否需要先使用 moment 对象?您是否也尝试过使用原生 JavaScript 日期对象方法?
    • 是的,我使用了 require,不,我没有尝试使用原生日期对象,因为我想我以后会需要 momentjs。
    • 它适用于原生 Date 对象,但如果我可以使用 momentJS 会很好。
    • @JohnyBro 是 days 不是 day
    【解决方案2】:

    我已经尝试在 php+mongodb 中跟踪日期范围的代码,它工作正常,所以尝试这样。

    $time1 = new DateTime('Your Date');
    $from = new MongoDate($time1->getTimestamp());
    $check_date = date('d-m-Y', strtotime($filter_data['to']));
    

    你的情况是这样的

    'created_on'=>array($gt' => $check_date)
    

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      相关资源
      最近更新 更多