2
在Mongo shell中,我将如何筛选今天(或特定日期)添加的记录?我没有新记录的时间戳的特定字段,但我想它可以从ObjectID恢复。MongoDB查找今日记录
在Mongo shell中,我将如何筛选今天(或特定日期)添加的记录?我没有新记录的时间戳的特定字段,但我想它可以从ObjectID恢复。MongoDB查找今日记录
我们可以使用$where
db.collection.find(
{ $where: "this._id.getTimestamp() >= ISODate('2017-02-25')" }
)
要买到今天的文件,或从去年午夜最好说:
db.collection.find({ $where: function() {
today = new Date(); //
today.setHours(0,0,0,0);
return (this._id.getTimestamp() >= today)
} });
当然它快得多有一个索引时间戳字段或跟随计算开始日期的ObjectID并将_id与它进行比较的方法,因为_id也被索引。
所以从今天得到所有的记录:
var startOfToday = new Date();
start.setHours(0,0,0,0);
// creates ObjectId() from date:
var _id = Math.floor(startOfToday.getTime()/1000).toString(16) + "0000000000000000";
> db.collection("records")
.find({ _id: { $gt: _id } });
为了从给定的时间段中的所有记录(例如:昨天):
var yesterdayStart = new Date();
var yesterdayEnd = new Date();
yesterdayStart.setDate(dat.getDate() - 1);
yesterdayEnd.setDate(dat.getDate() - 1);
yesterdayStart.setHours(0,0,0,0);
yesterdayStart.setHours(23,59,59,999);
var startId = Math.floor(yesterdayStart.getTime()/1000).toString(16) + "0000000000000000";
var endId = Math.floor(yesterdayEnd.getTime()/1000).toString(16) + "0000000000000000";
> db.collection("records")
.find({ _id: {
$gt: startId,
$lt: endId
}
}
);
@cubbuk我认为' $哪里'那个日子还没有实现mongo shell。 – thanasisp
@thanasisp $其中需要表扫描,因为它需要评估每个记录上的表达式,因此表现低下 – cubbuk
@cubbuk当然它的确如此。 – thanasisp