2013-09-19 3 views
0

Я храню даты рождения в mongodb с помощью функции javascript getTime(). Теперь я хочу запросить мой db для всех людей, которые находятся между 20 и 30 годами. Как я могу сделать это на сервере?javascript getTime() in mongodb

{ birth_date : { $gt : 20years, $lt : 30years } } 

в дБ date выглядит - 716763600000

ответ

1

Вы сохранили вас дата рождения, как миллисекунды с момента 1970/01/01. Тогда вы должны запросить с разницей с тех пор:

db.people.find({ 
    birth_date: { 
     $gt: new Date().getTime() - new Date(2000, 0, 1).getTime(), 
     $lt: new Date().getTime() - new Date(1990, 0, 1).getTime() 
    } 
}) 

В $gt команды вы запрашиваете все, с днем ​​рождения больше now before 30 years
В $lt команды вы запрашиваете все, с днем ​​рождения ниже now before 20 years

1

Вместо использования getTime(), вероятно, лучше работать с объектами Date напрямую. Таким образом, ваши данные будут отправляться по кабелю и сохранены с тегами как тип данных даты BSON, а не целочисленный тип. Вы можете вставлять и извлекать текущую дату, как это:

> db.foo.insert({time: new Date}); 
> db.foo.findOne(); 
{ 
    "_id" : ObjectId("523b182d42214dac3729419f"), 
    "time" : ISODate("2013-09-19T15:28:45.175Z") 
} 

А вот как вы можете запросить для всех, кто находится в пределах от 20 до 30 лет:

var t1 = new Date(); 
var t2 = new Date(); 
t1.setYear(t1.getYear() - 30); 
t2.setYear(t2.getYear() - 20); 
db.people.find({ 
    birth_date : {$gt: t1, $lt: t2} 
});