2017-02-25 5 views
2

Wie würde ich in der Mongo-Shell Datensätze filtern, die heute (oder zu einem bestimmten Datum) hinzugefügt wurden? Ich habe kein spezifisches Feld des Zeitstempels neuer Datensätze, aber ich denke, es kann von ObjectID wiederhergestellt werden.MongoDB die heutigen Datensätze finden

+1

@cubbuk Ich denke, dass ' $ where' wurde an diesen Tagen noch nicht für Mongo Shell implementiert. – thanasisp

+1

@thanasisp $ wo erfordert Tabelle scannen, wie es auswerten muss, wo Ausdruck auf jedem Datensatz, hat somit eine geringe Leistung – cubbuk

+0

@cubbuk natürlich tut es. – thanasisp

Antwort

2

können wir $where

db.collection.find(
    { $where: "this._id.getTimestamp() >= ISODate('2017-02-25')" } 
) 

verwenden, um Dokumente für heute zu bekommen, oder besser gesagt von den letzten Mitternacht:

db.collection.find({ $where: function() { 
    today = new Date(); // 
    today.setHours(0,0,0,0); 
    return (this._id.getTimestamp() >= today) 
} }); 

natürlich ist es viel schneller ein indiziertes Zeitstempel-Feld zu haben, oder zu folgen der Ansatz mit der Berechnung einer ObjectID für das Startdatum und vergleiche _id dagegen, da auch _id indexiert wird.

1

So alle Datensätze aus heute zu erhalten:

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 } }); 

Um alle Datensätze aus der gegebenen Zeitperiode (Beispiel: gestern): get

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 
        } 
      } 
    );