MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose-Datumsfilter

Verwenden Sie das tatsächliche Datumsobjekt für Ihre Abfrage, nicht den String, wie Sie es derzeit tun. Weil Mongo Daten speichert, die mit ISODate helper und das zugrunde liegende BSON (das von Mongo nativ verwendete Speicherdatenformat) einen dedizierten Datumstyp UTC datetime hat, der eine 64-Bit (also 8 Byte) vorzeichenbehaftete Ganzzahl ist, die Millisekunden seit der Unix-Zeitepoche angibt, gibt Ihre Abfrage nichts als zurück Es vergleicht die Datumsfelder in Mongo mit einer Zeichenfolge im ISO-Format.

Legen Sie also toISOString() ab Umwandlung und verwenden Sie das Datumsobjekt:

if (data.date) {
    const date = new Date();
    const dateRange = data.date.slice(0, -1); // strip the "d" from "7d"
    date.setDate(date.getDate() - dateRange);
    query.start = { $lte: date };
    console.log(query);
}

Call.find(query, function (error, docs) {
    if (error) callback(error, null);
    callback(null, docs);    
});

Besser noch, Sie können momentjs verwenden Plugin, das über eine sehr intuitive und einfache API zur Manipulation von Datum und Uhrzeit verfügt. Eine Methode, die Sie verwenden können, ist subtract() Funktion, um das Datumsobjekt n zu erhalten vor Anzahl von Tagen:

if (data.date) {    
    const dateRange = data.date.slice(0, -1); // strip the "d" from "7d"
    const date = moment().subtract(dateRange, "days");
    query.start = { $lte: date };
    console.log(query);
}

Call.find(query, function (error, docs) {
    if (error) callback(error, null);
    callback(null, docs);    
});