sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose Date Filter

Använd det faktiska datumobjektet för din fråga, inte sträng som du gör för närvarande. Eftersom mongo lagrar datum inslagna med ISODate helper och det underliggande BSON (lagringsdataformatet som används av mongo naturligt) har en dedikerad datumtyp UTC datetime som är ett 64-bitars (alltså 8 byte) signerat heltal som anger millisekunder sedan Unix-tidsepoken, din fråga returnerar inget som det kommer att jämföra datumfälten i mongo med en ISO-formaterad sträng.

Så släpp toISOString() konvertering och använd datumobjektet:

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

Ännu bättre, du kan använda momentjs plugin som har ett mycket intuitivt och enkelt datetime manipulation API. En metod du kan använda är subtract() funktion för att hämta datumobjektet n antal dagar sedan:

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



  1. ImportError:Ingen modul med namnet objectid

  2. Hur sorterar man array inuti samlingsposten i MongoDB?

  3. Mongorestore i en Dockerfile

  4. MongoDB $filter