Je construis un système de "filtrage" et j'ai besoin de demander aux utilisateurs de la collection dont la date de naissance est entre 2 dates.Demander une date dans MongoDB quand il est stocké en texte brut et format YYYY-MM-DD
Le code que j'ai droit ressemble maintenant:
if (req.query.ageMin) {
var dobMin = new Date(dateNow.setFullYear(dateNow.getFullYear() - req.query.ageMin));
}
if (req.query.ageMax) {
var dobMax = dateNow.setFullYear(dateNow.getFullYear() - req.query.ageMax);
}
if (dobMin && dobMax) {
query.dob = {
$gte: dobMin,
$lt: dobMax
}
} else if (dobMin) {
query.dob = {
$gte: dobMin
}
} else if (dobMax) {
query.dob = {
$lt: dobMax
}
}
db.users.find(query).toArray(function (err, users) {
console.log(users);
});
Un tableau vide est retourné (pas d'erreur). Je suppose que c'est parce que la date dans la collection n'est pas un objet date - ce sont simplement des chaînes par exemple "1980-06-15". Y at-il une option que je peux passer à la requête afin que Mongo fasse de la date stockée un objet date lors de l'interrogation? Ou toute solution pour cette question ...
Si * dateNow * est une date JS plaine, quand vous faites 'dateNow.setFullYear (...)' vous modifier la valeur de * dateNow *. Donc, si vous cherchez quelqu'un entre 18 et 20 ans en 2016, alors * dobMin * sera 1998 et * dobMax * sera 1978. En outre, * setFullYear * renvoie une valeur de temps, pas une date, donc * dobMax * est un nombre alors que * dobMin * est une date. Bien que les comparaisons utilisant des opérateurs de comparaison fonctionneront toujours car elles forceront les dates à numéroter. – RobG
Bonne capture, effectivement attrapé cela et ajouté la nouvelle fonction Date() sur dobMax ainsi. Merci pour l'info. –