【问题标题】:Mongodb documents which dates contain non-zero timestamp日期包含非零时间戳的 Mongodb 文档
【发布时间】:2018-12-26 23:07:29
【问题描述】:

对不起标题,我很难用几句话来解释......

我有一个带有date 字段的assets 集合。该字段应该只有日期部分,其余部分应该为零,即:ISODate("2018-07-18T00:00:00.000Z") 但是由于一个错误,我有一些日期,例如:ISODate("2017-12-16T08:35:20.201Z")

我想找到那些有问题的文件并确定它们的日期。

有没有办法查询类似的东西

{
  date: {
    $miliseconds: {
      $not: 0
    }
  }
}

【问题讨论】:

  • 类似db.colname.find({$expr: {$ne:[ {$millisecond: "$date" },0]}});
  • 这似乎行得通,有没有办法用查询而不是一个一个地更新这些文档?

标签: mongodb


【解决方案1】:

您可以使用聚合查询中的游标和批量更新来更新 3.6 版本中的匹配文档。

这是外壳示例。

var bulk = db.colname.initializeUnorderedBulkOp();
var count = 0;
var batch = 50; // Change batch size as you need

db.colname.aggregate([
     {$match : {$expr: {$ne:[ {$millisecond: "$date" },0]}}},
     {$project:{
       date:{$dateFromParts:{
         year:{$year:"$date"},
         month:{$month:"$date"},
         day:{$dayOfMonth:"$date"}
       }}
    }}
]).forEach(function(doc){ 
    bulk.find( {"_id" : doc._id}).updateOne(
     { "$set": {"date" : doc.date}} 
   ); 
    count++;  
    if (count == batch) { 
        bulk.execute(); 
        bulk = db.colname.initializeUnorderedBulkOp(); 
        count = 0;
    } 
});

if (count > 0) { 
   bulk.execute(); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 2019-05-09
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多