Как сделать запрос по возрасту в Mongodb? - PullRequest
2 голосов
/ 23 мая 2011

Если у меня есть поле dob (дата рождения) в MongoDB, как я могу запросить все записи, где дата рождения меньше 1/1/1990 (это строка) или меньше определенного возраста?

Ответы [ 3 ]

5 голосов
/ 24 мая 2011

Вы можете сохранить даты DOB в формате ISO - ггггммдд - в виде простого числа, т.е.

db.col.insert( { dob: 19910412 } )
db.col.insert( { dob: 19900708 } )
db.col.insert( { dob: 19880511 } )
db.col.insert( { dob: 19870225 } )

Затем, чтобы найти все даты до определенной даты, сделайте следующее:

db.col.find( { dob: { $lt: 19900101 } } )

Добавление индекса в это поле ускорит эти запросы:

db.col.ensureIndex( { dob: 1 } )
4 голосов
/ 23 мая 2011

Сохраните данные как объект Date () или как строку в формате ISO.В обоих случаях вы можете использовать стандартные операторы $ gt или $ lt.

2 голосов
/ 23 мая 2011

Я предлагаю хранить «реальный» объект даты, а не строку. Затем вы можете использовать обычные операторы сравнения. Если вы не можете сделать это, альтернативой будет хранить возрастное целое число. Последний менее полезен, так как его необходимо обновлять каждый год, но его стоит рассмотреть.

РЕДАКТИРОВАТЬ: Альтернативой, которая позволит вам работать с вашими существующими данными, будет передача функции соответствия в collection.find (). Очевидно, это влияет на производительность, так как функция должна оцениваться для каждого объекта в коллекции. См. $, где документы . Например ...

var date =  function() {
    return new Date(this.dob) < new Date('1/1/1990');
}

db.mycollection.find(date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...