如何在Mongodb中按年龄查询?

时间:2011-05-23 10:32:55

标签: date mongodb field

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

3 个答案:

答案 0 :(得分:5)

您可以将您的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 } )

答案 1 :(得分:4)

将数据存储为Date()对象或以ISO格式存储为字符串。在这两种情况下,您都可以使用标准的$ gt或$ lt运算符。

答案 2 :(得分:2)

我建议存储一个'真正的'日期对象而不是字符串。然后,您可以使用通常的比较运算符。如果你不能这样做,另一种方法是存储年龄整数。后者不太有用,因为它必须每年更新,但值得考虑。

编辑:允许您使用现有数据的替代方法是将匹配函数传递给collection.find()。显然,这会影响性能,因为必须为集合中的每个对象评估函数。见$where docs。例如......

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

db.mycollection.find(date);