- 我有一个mongoDB,其中包含一个日期字段
updated_at
。 - 此字段可能有值,也可能没有值。
现在,我想运行一个mongoDB
update
查询,该查询:
- 应更新所有
updated_at < someDate
的文档 - 应更新
updated_at is not present
的所有文档。
在测试javascript中,我发现与undefined
变量的日期比较不会产生预期的结果。因此,我问这个问题。
假设您有一个如下所示的文档:
db.col.save({});
db.col.save({ updated_at: null });
db.col.save({ updated_at: undefined });
db.col.save({ updated_at: ISODate("2018-05-29T00:00:00.000Z") });
db.col.save({ updated_at: ISODate("2018-06-02T00:00:00.000Z") });
假设您要更新文档1-4
则可以使用以下更新:
db.col.update({
$or: [
{ updated_at: { $lt: ISODate("2018-06-01T00:00:00.000Z") } },
{ updated_at: { $not: { $type: 9 } } }
] },
{ $set: { updated_at: ISODate("2018-06-01T00:00:00.000Z") } },
{ multi: true })
它只是检查$lt
定义的日期的条件,并使用$type来包含类型未Date
的所有文档。