【发布时间】:2011-05-24 08:23:47
【问题描述】:
如果我在 MongoDB 中有一个 dob(出生日期)字段,如何查询出生日期小于 1/1/1990(它是一个字符串)或小于某个年龄的所有记录?
【问题讨论】:
如果我在 MongoDB 中有一个 dob(出生日期)字段,如何查询出生日期小于 1/1/1990(它是一个字符串)或小于某个年龄的所有记录?
【问题讨论】:
您可以将您的 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 } )
【讨论】:
将数据存储为 Date() 对象或 ISO 格式的字符串。在这两种情况下,您都可以使用标准的 $gt 或 $lt 运算符。
【讨论】:
我建议存储一个“真实的”日期对象而不是字符串。然后,您可以使用通常的比较运算符。如果你不能这样做,另一种方法是存储一个年龄整数。后者用处不大,因为它必须每年更新,但值得考虑。
编辑:允许您使用现有数据的另一种方法是将匹配函数传递给 collection.find()。显然,这具有性能影响,因为必须为集合中的每个对象评估该函数。见$where docs。比如……
var date = function() {
return new Date(this.dob) < new Date('1/1/1990');
}
db.mycollection.find(date);
【讨论】: