MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Filtro de data do mangusto


Use o objeto de data real para sua consulta, não a string como você está fazendo atualmente. Como o mongo armazena datas agrupadas com o ISODate helper e o BSON subjacente (o formato de dados de armazenamento usado pelo mongo nativamente) tem um tipo de data dedicado UTC datetime que é um inteiro assinado de 64 bits (portanto, 8 bytes) denotando milissegundos desde a época do Unix, sua consulta não retorna nada como ele estará comparando os campos de data no mongo com uma string formatada ISO.

Então, solte o toISOString() conversão e use o objeto de 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);    
});

Melhor ainda, você pode usar o momentjs plugin que possui uma API de manipulação de data e hora muito intuitiva e fácil. Um método que você pode usar é o subtract() função para obter o objeto de data n número de dias atrás:
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);    
});