如何在Mongodb中按年龄查询?

问题描述

| 如果我在MongoDB中有一个dob(出生日期)字段,如何查询出生日期小于1990年1月1日(是字符串)或小于特定年龄的所有记录?     

解决方法

可以将数据存储为Date()对象或ISO格式的字符串。在这两种情况下,都可以使用标准的$ gt或$ lt运算符。     ,您可以将DOB日期以ISO格式-yyyymmdd-存储为简单数字,即
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 } )
    ,我建议存储一个“真实的”日期对象而不是一个字符串。然后,您可以使用通常的比较运算符。如果您不能这样做,则可以选择存储年龄整数。后者的用处不大,因为它必须每年更新一次,但值得考虑。 编辑:一种允许您使用现有数据的替代方法是将match函数传递给collection.find()。显然,这对性能有影响,因为必须为集合中的每个对象评估函数。请参阅$ where文档。例如...
var date =  function() {
    return new Date(this.dob) < new Date(\'1/1/1990\');
}

db.mycollection.find(date);