代码之家  ›  专栏  ›  技术社区  ›  Juan Fuentes

日期包含非零时间戳的MongoDB文档

  •  0
  • Juan Fuentes  · 技术社区  · 6 年前

    对不起,我觉得很难用几句话来解释…

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

    我想找到那些违法的文件,并确定他们的日期。

    有什么方法可以查询

    {
      date: {
        $miliseconds: {
          $not: 0
        }
      }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   s7vr    6 年前

    您可以使用聚合查询和批量更新中的光标更新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(); 
    }