sql >> Databáze >  >> NoSQL >> MongoDB

Mangoose datový filtr

Pro dotaz použijte objekt skutečného data, nikoli řetězec, jak to děláte nyní. Protože mongo ukládá data zabalená pomocí ISODate helper a základní BSON (formát dat úložiště používaný mongo nativně) má vyhrazený typ data UTC datetime, což je 64bitové (tedy 8 bajtové) celé číslo se znaménkem označující milisekundy od doby Unixu, váš dotaz nevrací nic jako bude to porovnávat pole data v mongo s řetězcem ve formátu ISO.

Vypusťte tedy toISOString() konverzi a použijte objekt 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);    
});

Ještě lépe, můžete použít momentjs plugin, který má velmi intuitivní a snadné rozhraní API pro manipulaci s datem a časem. Jednou z metod, kterou můžete použít, je subtract() funkce pro získání objektu data n počet dní před:

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. Problém s analýzou serveru a mongodb

  2. geoNear vrací nesprávnou vzdálenost

  3. MongoDB - Rozviňte pole pomocí agregace a odstraňte duplikáty

  4. Název kolekce MongoDB s pomlčkou