MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Filtre de date de mangouste

Utilisez l'objet date réel pour votre requête, et non une chaîne comme vous le faites actuellement. Parce que mongo stocke les dates enveloppées avec le ISODate helper et le BSON sous-jacent (le format de données de stockage utilisé par mongo nativement) a un type de date dédié UTC datetime qui est un entier signé de 64 bits (donc 8 octets) indiquant les millisecondes depuis l'époque Unix, votre requête ne renvoie rien comme il comparera les champs de date dans mongo avec une chaîne au format ISO.

Alors, déposez le toISOString() conversion et utilisez l'objet date :

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

Mieux encore, vous pouvez utiliser le momentjs plugin qui a une API de manipulation datetime très intuitive et facile. Une méthode que vous pouvez utiliser est le subtract() fonction pour obtenir l'objet date n il y a nombre de jours :

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