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

时间:2018-07-18 22:47:56

标签: mongodb

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

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

我想找到那些有问题的文档并确定其日期。

有什么方法可以查询类似

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

1 个答案:

答案 0 :(得分: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(); 
}