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

Mongoose Dato Filter

Brug det faktiske datoobjekt til din forespørgsel, ikke streng, som du gør i øjeblikket. Fordi mongo gemmer datoer pakket med ISODate hjælperen og det underliggende BSON (lagerdataformatet brugt af mongo native) har en dedikeret datotype UTC datetime, som er et 64 bit (altså 8 byte) fortegnet heltal, der angiver millisekunder siden Unix-tidsepoken, din forespørgsel returnerer ikke noget som det vil sammenligne datofelterne i mongo med en ISO-formateret streng.

Så slip toISOString() konvertering og brug datoobjektet:

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

Endnu bedre, du kan bruge momentjs plugin, der har en meget intuitiv og nem datetime manipulation API. En metode, du kan bruge, er subtract() funktion for at hente datoobjektet n antal dage siden:

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. MongoDB \uXXXX problem

  2. Begræns antallet af feltretur fra mongodb i Meteor

  3. Opbygning og installation af MongoDB C++ driver i OS X

  4. hvordan gemmer man et resultat fra en mongodb-forespørgsel i en javascript-variabel?