我试图使用时间戳查找几天前的天数,但我不知道该怎么做?
{
"_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()