sql >> Database >  >> NoSQL >> MongoDB

Datumfilter mangoest

Gebruik het werkelijke datumobject voor uw zoekopdracht, niet de tekenreeks zoals u op dit moment doet. Omdat mongo datums opslaat die zijn verpakt met de ISODate helper en de onderliggende BSON (het opslaggegevensformaat dat native door mongo wordt gebruikt) heeft een speciaal datumtype UTC datetime dat een 64 bit (dus 8 byte) ondertekend geheel getal is dat milliseconden aangeeft sinds het Unix-tijdperk, uw zoekopdracht retourneert niets als het zal de datumvelden in mongo vergelijken met een ISO-geformatteerde string.

Dus, laat de toISOString() . vallen conversie en gebruik het datumobject:

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

Beter nog, je kunt de momentjs gebruiken plug-in die een zeer intuïtieve en gemakkelijke API voor datetime-manipulatie heeft. Een methode die u kunt gebruiken is de subtract() functie om het datumobject n . te krijgen aantal dagen geleden:

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. Hoe hernoem ik velden bij het uitvoeren van zoeken/projecteren in MongoDB?

  2. Opgeslagen functie oproepen in mongodb

  3. MongoDB, Java:datumeigenschap ophalen als UTC

  4. Hoe u uw functie kunt bekijkenCompatibilityVersion in MongoDB