对不起,标题,我发现很难用几句话来解释...
我有一个assets
字段和一个date
字段。该字段应仅包含日期部分,其余部分应为零,即:ISODate("2018-07-18T00:00:00.000Z")
,但是由于错误,我有一些日期,例如:ISODate("2017-12-16T08:35:20.201Z")
。
我想找到那些有问题的文档并确定其日期。
有什么方法可以查询类似
{
date: {
$miliseconds: {
$not: 0
}
}
}
答案 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();
}