MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Filtro data mangusta

Usa l'oggetto della data effettiva per la tua query, non la stringa come stai facendo attualmente. Perché mongo memorizza le date avvolte con ISODate helper e il BSON sottostante (il formato dei dati di archiviazione utilizzato da mongo in modo nativo) ha un tipo di data dedicato UTC datetime che è un intero con segno a 64 bit (quindi, 8 byte) che denota millisecondi dall'epoca di Unix, la tua query non restituisce nulla come confronterà i campi della data in mongo con una stringa formattata ISO.

Quindi, rilascia toISOString() conversione e utilizzare l'oggetto data:

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

Meglio ancora, puoi utilizzare il momentjs plug-in che ha un'API di manipolazione della data e dell'ora molto intuitiva e facile. Un metodo che puoi utilizzare è subtract() funzione per ottenere l'oggetto data n numero di giorni fa:

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