Mongodb 如何从时间戳字段中查找多少天前



我试图使用时间戳查找几天前的天数,但我不知道该怎么做?

{
    "_id" : ObjectId("5504cc9ddd5af617caae30b3"),
    "session_id" : 1,
    "Timestamp" : "2014-04-07T10:51:09.277Z",
    "Item_ID" : 214536502,
    "Category" : 0
}

如何使用"时间戳"字段计算几天前的天数?

您可以在时间戳字段上使用 aggregate$project new Date(),然后进行计算,如下所示:

pipe = {
    "$project" : {
        "_id" : 1,
        "daySince" : {
            "$divide" : [
                {
                    "$subtract" : [
                        new Date(),
                        new Date("$Timestamp")
                    ]
                },
                86400000
            ]
        }
    }
}

要计算:

db.collection.aggregate(pipeline=pipe)

由于 Timestamp 不是ISODate对象,您只需将其转换为 1,然后减去当前日期,然后将结果除以 60*60*24*1000 ,然后它将是自今天以来的天数。

您还可以将new Date()更改为需要比较的内容。

更新:

由于我认为Timestamp格式可能格式不正确,因此您可以使用mapReduce函数来计算:

// in your mongo shell using the db
var mapTimestamp = function() { 
    daySince = parseInt(new Date() - new Date(this.Timestamp) / 86400000);
    emit(this._id, daySince); 
}
// since you map reduce only on one field, there's really no need for this
var reduceTimestamp = function (key, value) { return value; }
db.collection.mapReduce(mapTimestamp, reduceTimestamp, {out: "sample"})

要显示结果,请执行以下操作:

db.sample.find()

最新更新