mongo.db更新可能有也可能没有值的日期字段


  • 我有一个mongoDB,其中包含一个日期字段updated_at
  • 此字段可能有值,也可能没有值。

现在,我想运行一个mongoDBupdate查询,该查询:

  • 应更新所有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的所有文档。

最新更新