如果我在MongoDB中有一个dob(出生日期)字段,如何查询出生日期小于1/1/1990(它是一个字符串)或小于某个年龄的所有记录?
答案 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);